一個例子如下:如何在類的構造函數的mem_initilizer_list初始化聯合對象
struct X {
union {
X* px;
void* pv;
} U;
X();
};
X::X() : /* How to initialize px here? */
{}
我的問題是:如何從MEM-初始化列表初始化一個工會子對象一個類的構造函數的?
一個例子如下:如何在類的構造函數的mem_initilizer_list初始化聯合對象
struct X {
union {
X* px;
void* pv;
} U;
X();
};
X::X() : /* How to initialize px here? */
{}
我的問題是:如何從MEM-初始化列表初始化一個工會子對象一個類的構造函數的?
你需要給工會構造以及:
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工會都已經做的編譯器生成的默認構造函數那對你。在這種情況下,簡單地定義爲,而不是如下得到的值初始化的變量:
X x = X();
如果你沒有陷入過去,那麼你可以使用大括號初始化來初始化第一個聯合成員,而沒有任何搞亂構造函數的東西。 –
@MikeSeymour好點,C++ 11的確可以幫到你。 – ComicSansMS
X::X(X * x) : U{x} {}
除非你堅持2011年預初始化,或者需要初始化比第一工會成員以外的東西;那麼你需要一個聯合的構造函數,正如另一個答案所建議的那樣。
可能的重複[我可以初始化一個聯合在mem初始化?](http://stackoverflow.com/questions/13056366/can-i-initialize-a-union-in-a-mem-initializer) – ecatmur