2016-12-26 95 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,它告诉您非聚合类型的“从空初始化程序列表中”意味着值初始化。

所以是的,他们都评估相同的事情。

相关问题