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

Is "new int[8]()" equivalent to "new int[8]{}" in C++11?

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

换句话说:

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

new int[8]() 将在 [dcl.init]/17.4 之前进行值初始化。既然是数组,[dcl.init]/8.3告诉我们,值初始化数组就是对每个元素进行值初始化。

new int[8]{} 将通过 [dcl.init.list]/3.2 对数组调用聚合初始化。由于 braced-init-list 中没有元素,数组中的每个剩余元素(即:所有 8 个)将被初始化 "from an empty initializer list" ([dcl.init.aggr]/8)。再次跳转 [dcl.init.list] 之后,将带您进入 3.4,它告诉您 "from an empty initializer list" 对于非聚合类型意味着值初始化。

所以是的,它们的计算结果相同。