是" new int [8]()"相当于" new int [8] {}"在C ++ 11中?

时间:2016-12-26 06:34:05

标签: c++ c++11 constructor standards list-initialization

C ++ 11中new int[8]()等同于new int[8]{}吗?

换句话说:

C ++ 11标准是否保证new int[8]()new int[8]{}中的每一个都返回一个零初始化数组?

1 个答案:

答案 0 :(得分:16)

new int[8]()将由[dcl.init] /17.4进行值初始化。由于它是一个数组,[dcl.init] /8.3告诉我们初始化数组的值意味着对每个元素进行值初始化。

new int[8]{}将通过[dcl.init.list] /3.2调用数组上的聚合初始化。由于braced-init-list中没有元素,因此数组中的每个剩余元素(即:all 8)将从空的初始化列表"初始化" ([dcl.init.aggr] / 8)。在再次通过[dcl.init.list]跳舞之后,将您带到3.4,它会告诉您"来自空的初始化列表"对于非聚合类型,意味着价值初始化。

所以是的,他们都评价同样的事情。