Инициализирующие нулями элементы std :: array с инициализатором члена по умолчанию
Предположим, у меня есть шаблон класса, подобный этому:
template<typename T, size_t N>
struct S {
std::array<T,N> a;
};
Есть ли инициализатор члена по умолчанию я могу разместить на, a
template<typename T, size_t N>
struct S {
std::array<T,N> a = ???;
};
так что независимо от того, что такое T
, элементы a
всегда будут инициализированы (никогда не будут иметь неопределенного значения)? Т.е., даже если T
является примитивным типом типа int
.
Ответы
Ответ 1
Это:
template<typename T, size_t N>
struct S {
std::array<T,N> a = {};
};
Это будет рекурсивно копировать-инициализировать каждый элемент из {}
. Для int
это будет инициализация нуля. Конечно, кто-то всегда может написать:
struct A {
A() {}
int i;
};
что помешало бы i
быть инициализированным. Но это на них.
Ответ 2
std::array
является агрегатным типом. Вы можете агрегировать инициализировать его с помощью пустых фигурных скобок {}
и это будет соответственно инициализировать элементы внутреннего массива T
которые содержит std::array
.