一个例子如下:
struct X {
union {
X* px;
void* pv;
} U;
X();
};
X::X() : /* How to initialize px here? */
{}
我的问题是:如何从类的构造函数的 mem-initializer-list 中初始化联合子对象?
一个例子如下:
struct X {
union {
X* px;
void* pv;
} U;
X();
};
X::X() : /* How to initialize px here? */
{}
我的问题是:如何从类的构造函数的 mem-initializer-list 中初始化联合子对象?
您还需要给联合一个构造函数:
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();
X::X(X * x) : U{x} {}
除非您坚持 2011 年之前的初始化,或者需要初始化第一个工会成员以外的其他东西;那么你需要一个联合的构造函数,正如另一个答案所建议的那样。