如何在类的构造函数的mem_initilizer_list中初始化union对象

时间:2013-10-21 09:59:14

标签: c++

一个例子如下:

struct X {
    union {
        X* px;
        void* pv;
    } U;
    X();
};
X::X() : /* How to initialize px here? */
{}

我的问题是:如何从类的构造函数的mem-initializer-list初始化union子对象?

2 个答案:

答案 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年之前的初始化,或者需要初始化除第一个工会成员之外的其他内容;然后你需要一个联盟的构造函数,如另一个答案所示。