Инициализирующие нулями элементы std :: array с инициализатором члена по умолчанию - PullRequest
0 голосов
/ 05 января 2019

Предположим, у меня есть шаблон класса, подобный этому:

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.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

std::array является агрегатным типом. Вы можете агрегировать инициализировать его с пустыми скобками {}, и это будет соответственно инициализировать элементы внутреннего массива T, который содержит std::array.

0 голосов
/ 05 января 2019

Это:

template<typename T, size_t N>
struct S {
   std::array<T,N> a = {};
};

Это будет рекурсивно копировать-инициализировать каждый элемент из {}. Для int это инициализируется нулями. Конечно, кто-то всегда может написать:

struct A {
    A() {}
    int i;
};

, что помешает инициализации i. Но это на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...