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

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

template<size_t COUNT>
class Test {
public:
uint32 data1 = {};
};

1

Решение

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

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

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

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

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]