2

一个例子如下:

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

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

4

2 回答 2

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();
于 2013-10-21T10:29:08.877 回答
1
X::X(X * x) : U{x} {}

除非您坚持 2011 年之前的初始化,或者需要初始化第一个工会成员以外的其他东西;那么你需要一个联合的构造函数,正如另一个答案所建议的那样。

于 2013-10-21T11:07:35.483 回答