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