2016-12-26 83 views
12

new int[8]()等效於C++ 11中的new int[8]{}在C++ 11中,「new int [8]()」等價於「new int [8] {}」嗎?

換句話說:

是否C++ 11標準的每一個new int[8]()new int[8]{}保證返回零初始化數組?

+0

我讀到的這些問題越多,我就越感到困惑,爲什麼委員會曾經認爲大括號的語法是個好主意...... – Mehrdad

+1

@Mehrdad:那麼...什麼,你寧願不能夠初始化你堆分配的值的數組? –

+0

@NicolBolas:你最後一次需要做什麼?你在C++ 11之前做了什麼? – Mehrdad

回答

16

new int[8]()將由[dcl.init] /17.4進行值初始化。由於它是一個數組,[dcl.init] /8.3告訴我們,初始化數組的值意味着對每個元素進行值初始化。

new int[8]{}將由[dcl.init.list] /3.2調用數組上的聚合初始化。由於braced-init-list中沒有元素,因此數組中的每個剩餘元素(即:全部8個)將從「空初始化程序列表」([dcl.init.aggr]/8)初始化。在再次跳過[dcl.init.list]之後,它會將您引導到3.4,它告訴您非聚合類型的「從空初始化程序列表中」意味着值初始化。

所以是的,他們都評估相同的事情。

相關問題