Подтвердить что ты не робот

Является ли "new int [8]()" эквивалентным "new int [8] {}" в С++ 11?

Является new int[8]() эквивалентным new int[8]{} в С++ 11?

Другими словами:

Поддерживает ли стандарт С++ 11 каждый из new int[8]() и new int[8]{} возвращает нулевой инициализированный массив?

4b9b3361

Ответ 1

new int[8]() будет с помощью [dcl.init]/17.4 инициализироваться значением. Поскольку это массив, [dcl.init]/8.3 говорит нам, что значение, инициализирующее массив, означает инициализацию значения каждого элемента.

new int[8]{} будет с помощью [dcl.init.list]/3.2 вызывать агрегатную инициализацию в массиве. Так как в списке бит-init нет элементов, каждый из оставшихся элементов массива (т.е. Все 8) будет инициализирован "из пустого списка инициализаторов" ([dcl.init.aggr]/8). Который после повторного танца через [dcl.init.list] приводит вас к 3.4, в котором говорится, что "из пустого списка инициализаторов" для неагрегатных типов означает инициализацию значения.

Итак, они оба оценивают одно и то же.