2017-02-18 28 views
0
struct X { const int n; }; 
union U { X x; float f; }; 

void tong() { 
    U u = {{ 1 }}; 
    u.f = 5.f; 
    X *p = new (&u.x) X {2}; 
} 

{{}}の機能は何ですか? 書き込みが必要ですか - (&u.x)構造体と共用体

+0

http://en.cppreference.com/w/cpp/language/aggregate_initialization http://en.cppreference.com/w/cpp/language/new – LogicStuff

+3

'{{1}}'は構造体を含む共用体の定数初期化子です。外側の '{}'は共用体を表し、内側の{}は構造体を表します。だから '{{1}} 'の' 1'は 'n 'を1に設定しています。 – lurker

+0

@lurker私は答えに入れました。それはまさにOPが探しているものです。 – skypjack

答えて

1

new (&u.x) X {2}は、「配置の新しい」構文です。メモリを割り当てずに既存のアドレス&u.xを使用します。

あなただけ書くことができます代わりに

u.x = {2}; 
X *p = &u.x; 
+0

'u.x'に代入する際の問題は' x'に 'const'メンバがあることです。 –

+0

@ user7585238最初の括弧は共用体、2番目は構造体です。それは早く気づいた。 – Zefick