9

最小限のコード例:

struct B { 
  union U {
    struct S {} s;
    int i = 100;
  }
  u;  
};

a を宣言するとB obj;、 のobj.u.i代わりにガベージ値が割り当てられます100ここでデモを参照してください。(ガベージ値は最適化フラグなどによって異なります)。

ユニオンで動作するはずの「クラス内初期化」機能です。

  • はいの場合、正しい構文は何ですか? それとも、これは g++ のバグですか?
  • そうでない場合はどうなりint i = 100;ますか?
4

2 に答える 2

2

ユニオンは複数の要素を再結合するため、そのようなものだと思います。以下は、回避策の構文です。

struct B { 
  union U {
    int i;
  }
  u {100};  
};

int main () {
  B obj;
  std::cout << "obj.u.i = " << obj.u.i << "\n";
}
于 2013-07-22T14:39:54.793 に答える