将具有用户定义的构造函数的类填充到并集中

Chr*_*ris 4 c++ constructor unions

class Foo {
    Foo(int val) { /* Do some initialization */ }
    Foo() { /* Do nothing */ }
};
union Bar {
    Foo foo;
};
Run Code Online (Sandbox Code Playgroud)

该代码生成此错误:

错误C2620:union'Bar'的成员'Bar :: foo'具有用户定义的构造函数或非平凡的默认构造函数

我明白为什么如果构造函数实际执行某些操作会抛出该错误,但这里的构造函数不带参数而什么也不做.有什么办法可以把这个班级变成一个联盟吗?我不得不一直采取行动,char foo[sizeof(Foo)]并希望有一个更清洁的解决方案.

Las*_*loG 6

最初来自这个问题:

使用非平凡的构造函数初始化联合:

从C++ 03,9.5 Unions,第162页

联合可以具有成员函数(包括构造函数和析构函数),但不具有虚函数(10.3).工会不得有基类.联合不应该用作基类.具有非平凡构造函数(12.1)的类的对象,非平凡的复制构造函数(12.8),非平凡的析构函数(12.4)或非平凡的复制赋值运算符(13.5.3,12.8)不能是联合的成员,也不能是这类对象的数组

所以,你的班级被禁止成为工会的一员.