对于以下代码:
class Foo{
int foo;
public:
Foo() : foo(13) {}
int getFoo() const { return foo; }
};
union Bar{
Foo fBar;
double dBar;
};
我相信这在 C++ 中是完全合法的。http://en.cppreference.com/w/cpp/language/union#Explanation说:
如果两个联合成员是标准布局类型,则可以在任何编译器上检查它们的公共子序列
Bar bar = { Foo() }
当我在 Visual Studio 2008 中尝试此操作时,出现错误:
错误 C2620: 的成员
Bar::fBar
具有union Bar
用户定义的构造函数或非平凡的默认构造函数
错误 C2620指出:
联合成员不能有默认构造函数。
这里发生了什么?这曾经是 C++ 的要求吗,我认为标准布局是唯一的要求?有解决办法吗?