2015-09-06 57 views
1

語法的調用是什麼,它有什麼作用?對於哪個C++標準呢?C++新的語法,請解釋

shared_ptr<int> p{new int{10}}; 

我感到困惑的第一套大括號{}的。我想,第二組是創建一個10個元素的臨時對象?

+0

它在堆上創建1個int值爲10我認爲,然後將其存儲在shared_ptr – paulm

+3

閱讀[統一初始化語法](http://www.stroustrup.com/C++11FAQ.html#均勻-INIT)。 –

+3

這會更好地表達爲'auto p = make_shared (10);' – sp2danny

回答

5

語法被調用的是什麼,它有什麼作用?

這種語法稱爲統一初始化列表初始化。它做了很多不同的事情explained here。在這種特殊情況下,構造使用普通指針初始化共享指針,並將新分配的整數設置爲10(demo)。

的效果是相同的,如下面的代碼片斷:

int *tmp = new int; 
*tmp = 10; 
shared_ptr p(tmp); 

對於該C++標準它是什麼?

此語法是在C++ 11中引入的。

+0

感謝您的回答!所以,如果它等於'shared_ptr p(new int(10));',這個語法是什麼? – Qwertypal

+0

@Qwertypal這個新的語法更具有限制性。例如,如果使用不適合在'int',這樣,一個'長long'不變'詮釋一個(123456789098876543LL);'您的變量'了'會得到一個負數後截斷([DEMO]( http://ideone.com/O3kG3h))。如果你用'{...}'嘗試同樣的事情,你會得到一個編譯時錯誤([demo](http://ideone.com/71zbpI))。 – dasblinkenlight