2017-02-18 95 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聯盟的第一個方括號,結構的第二個方括號。這是早些時候發現的。 – Zefick