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]{}
保證返回零初始化數組?
是new int[8]()
等效於C++ 11中的new int[8]{}
?在C++ 11中,「new int [8]()」等價於「new int [8] {}」嗎?
換句話說:
是否C++ 11標準的每一個new int[8]()
和new int[8]{}
保證返回零初始化數組?
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,它告訴您非聚合類型的「從空初始化程序列表中」意味着值初始化。
所以是的,他們都評估相同的事情。
我讀到的這些問題越多,我就越感到困惑,爲什麼委員會曾經認爲大括號的語法是個好主意...... – Mehrdad
@Mehrdad:那麼...什麼,你寧願不能夠初始化你堆分配的值的數組? –
@NicolBolas:你最後一次需要做什麼?你在C++ 11之前做了什麼? – Mehrdad