Инициализация члена класса C++11

Просто переключился на C++11 с C++03, и мне было интересно, определено ли следующее, чтобы всегда инициализировать массив нулем data для всех элементов?

template<size_t COUNT>
class Test {
public:
    uint32 data[COUNT] = {};
};

1 ответ

Решение

Да, это гарантировано; инициализация списка превращается в агрегатную инициализацию для типа массива:

В противном случае, если T является агрегатным типом, выполняется агрегатная инициализация.

тогда для совокупной инициализации:

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

Так что все элементы data будет значение инициализировано, для uint32 наконец они будут инициализированы нулями.

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

Другие вопросы по тегам