首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的联合实际上是一个类吗?

C++中的联合实际上是一个类吗?
EN

Stack Overflow用户
提问于 2014-05-29 19:35:07
回答 1查看 4.6K关注 0票数 20

一位初级开发人员问我,是否可以用POD参数重载联合的赋值操作符,以便当联合的实例被分配给该类型的变量时,联合中的相应数据类型将被写入。我回答说我不这么认为,但随后使用了以下代码。令我惊讶的是,这段代码实际上是经过编译的(使用Ubuntu12.04上的g++版本4.6.3 )

代码语言:javascript
运行
复制
union unMember 
{

  float fData;
  unsigned int uiData;
  unMember():uiData(0) {};
  unMember(float data):fData(data) {};
  unMember(unsigned int data):uiData(data) {};

  operator float() {return fData;};
  operator unsigned int() {return uiData;};

  unMember& operator=(float data) {fData = data;return *this;};
  unMember& operator=(unsigned int data) {uiData = data; return *this;};

  float GetFloat() const {return fData;};
};

int main () {

  float fTest = 1.0;
  unsigned int uiTest = 10;
  unMember data = fTest;

  unMember data2 = uiTest;
  unMember data3 = data2;

  float f = data.GetFloat();

  return 0;
}

这让我意识到,我对联合几乎一无所知(至少在C++而不是C的上下文中是如此),因为我真的没有想到能够以这种方式为联合定义成员函数。上面的代码告诉我,在C++中,联合是作为一个类在内部实现的,但在C++标准中实际上是这样的吗,或者这只是g++编译器的某种怪癖?

此外,由于这真的动摇了我对工会是什么的理解,我欢迎任何意见,以这种方式实现工会的成员职能是否可取?在我的联合的上述实现中,有没有什么本质上不安全的地方?

在过去,我只在容器类中使用联合,容器类有一个指示器变量,用于存储联合中实际写入的类型,老实说,我认为这是它们的主要用途。以这种方式重载联合的构造函数等真的很常见吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23932389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档