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)]并希望有一个更清洁的解决方案.
最初来自这个问题:
从C++ 03,9.5 Unions,第162页
联合可以具有成员函数(包括构造函数和析构函数),但不具有虚函数(10.3).工会不得有基类.联合不应该用作基类.具有非平凡构造函数(12.1)的类的对象,非平凡的复制构造函数(12.8),非平凡的析构函数(12.4)或非平凡的复制赋值运算符(13.5.3,12.8)不能是联合的成员,也不能是这类对象的数组
所以,你的班级被禁止成为工会的一员.
| 归档时间: |
|
| 查看次数: |
2797 次 |
| 最近记录: |