Будет ли построение по умолчанию целочисленного массива инициализировать его нулями? - PullRequest
7 голосов
/ 28 июня 2011

Если у меня есть структура с членом массива, и я явно вызываю конструктор массива по умолчанию в конструкторе структуры, будут ли элементы построены по умолчанию?(В случае целочисленного массива это будет означать инициализацию с нуля).

struct S
{
    S() : array() {}

    int array[SIZE];
};

...

S s;
// is s.array zero-initialized?

Быстрый тест с gcc предполагает, что это так, но я хотел подтвердить, что могу положиться на этоповедение.

(Я заметил, что если я не буду явно создавать массив по умолчанию в конструкторе структуры, элементы массива будут иметь случайные значения.)

1 Ответ

12 голосов
/ 28 июня 2011

Да (выделение шахты):

(C ++ 03 8.5)

Инициализация значения объекта типа T означает:

  • , если T является типом класса (раздел 9) с объявленным пользователем конструктором (12.1), то вызывается конструктор по умолчанию для T (и инициализация является некорректной, если T не имеетдоступный конструктор по умолчанию);

  • если T является типом класса, не являющимся объединением без конструктора, объявленного пользователем, то каждый нестатический элемент> data и компонент базового класса T инициализируются значением

  • если T является типом массива, то каждый элемент инициализируется значением;

  • в противном случае,объект инициализируется нулями

...

Объект, инициализатором которого является пустой набор скобок, т. е. (), долженбыть инициализированным значением.

...