Цитировать cppreference в конструкторе std::array
:
инициализирует массив, следуя правилам агрегатной инициализации
(обратите внимание, что инициализация по умолчанию может привести к неопределенным значениям
для не класса T)
Объявляя вашу переменную как std::array<Node *, 100> children;
, вы вызываете конструктор по умолчанию. И, согласно правилам инициализации, POD (int
, char
, double
, указатели, ...) не инициализируются по умолчанию. Так что нет, ваш массив не будет инициализирован с nullptr
, если вы не используете агрегатную инициализацию.
Совокупная инициализация
std::array<Node *, 100> children;
вызывает конструктор по умолчанию, но агрегатный инициализатор не дается, поэтому агрегатная инициализация не произойдет. Тем не менее
std::array<Node *, 100> children{}
std::array<Node *, 100> children = {};
не только вызывает конструктор по умолчанию, но также выполняет агрегатную инициализацию. В этом случае совокупность {}
просто пуста. И, следуя правилам агрегатной инициализации, если инициализаторов меньше, чем элементов данных, каждый неинициализированный элемент будет инициализирован по умолчанию. Итак
Node x;
std::array<Node *, 100> children = {&x};
Например,
инициализирует первый элемент массива указателем на x
, и каждый последующий элемент будет по умолчанию инициализирован на nullptr
.