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 に初期化するだけの場合、これは必要ないことに注意してください。コンパイラによって生成された共用体の既定のコンストラクターは、既にそれを行っています。その場合、代わりに次のように変数を定義して、値の初期化を取得します。

X x = X();
于 2013-10-21T10:29:08.877 に答える