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)
?構造体と共用体
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)
?構造体と共用体
new (&u.x) X {2}
は、「配置の新しい」構文です。メモリを割り当てずに既存のアドレス&u.x
を使用します。
あなただけ書くことができます代わりに
u.x = {2};
X *p = &u.x;
'u.x'に代入する際の問題は' x'に 'const'メンバがあることです。 –
@ user7585238最初の括弧は共用体、2番目は構造体です。それは早く気づいた。 – Zefick
http://en.cppreference.com/w/cpp/language/aggregate_initialization http://en.cppreference.com/w/cpp/language/new – LogicStuff
'{{1}}'は構造体を含む共用体の定数初期化子です。外側の '{}'は共用体を表し、内側の{}は構造体を表します。だから '{{1}} 'の' 1'は 'n 'を1に設定しています。 – lurker
@lurker私は答えに入れました。それはまさにOPが探しているものです。 – skypjack