一个例子如下:
struct X {
union {
X* px;
void* pv;
} U;
X();
};
X::X() : /* How to initialize px here? */
{}
我的问题是:如何从类的构造函数的mem-initializer-list初始化union子对象?
答案 0 :(得分:3)
您还需要为联合提供构造函数:
struct X {
union U_T {
X* px;
void* pv;
U_T(X* ptr) : px(ptr)
{}
} U;
X(X* ptr);
};
X::X(X* ptr) : U(ptr)
{}
请注意,如果您要做的只是初始化为0,则不需要这样做。编译器生成的union的默认构造函数已经为您完成了。在这种情况下,只需按如下方式定义变量即可获得值初始化:
X x = X();
答案 1 :(得分:1)
X::X(X * x) : U{x} {}
除非您遇到2011年之前的初始化,或者需要初始化除第一个工会成员之外的其他内容;然后你需要一个联盟的构造函数,如另一个答案所示。