c++ - union 可以包含具有用户定义构造函数的类的对象吗?

标签 c++ oop constructor unions

union 体可以包含具有用户定义构造函数的类的对象吗?当我尝试创建一个时,它给出了一个错误,说“union 'c'的成员'c::aa'具有用户定义的构造函数或非平凡的默认构造函数” 它是标准还是我的代码有任何错误?

我测试的代码是

class a
{  
public:

  int aaa;
  a(){}

};

class b
{

public :

  long bbb;
  b() { }

};

union c
{

public :

  c()  {}

    a aa;
  b bb;  
};

最佳答案

在 C++11 之前,答案是否定的——union 只能包含值类型(借用托管代码中的术语),即只包含的类型数据成员。

Union 在所有成员之间共享内存占用。在 union 中拥有复杂的成员会导致这样一种情况,即作用于一个类的数据成员的方法会破坏 union 中另一个类的数据成员。

也许您想要的是一个struct

关于c++ - union 可以包含具有用户定义构造函数的类的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21027894/

相关文章:

c# - 我应该使用对象初始值设定项还是构造函数?

c++ - 静态函数的意外行为

c++ - 如何在编译时创建具有函数签名的函数指针

c++ - 无法在 CUDA 中找到 1 到 100 数字的简单和?

php - 在 oop php 中重用 mysql 连接

oop - 如何以面向对象的方式对商店的营业时间进行建模?

c++ - g++对齐问题

c# - 向流畅的界面构建器添加 fork

c++ - (C++) 在构造函数中初始化的变量被放在一个无关数组的末尾。

javascript - JavaScript 中长构造函数的最佳实践