Просто переключился на C ++ 11 с C ++ 03, и мне было интересно, определено ли следующее, чтобы всегда инициализировать массив нулем data
для всех элементов?
template<size_t COUNT>
class Test {
public:
uint32 data1 = {};
};
Да, это гарантировано; инициализация списка превращается в агрегатная инициализация для типа массива:
В противном случае, если
T
является агрегатным типом, выполняется агрегатная инициализация.
тогда для совокупной инициализации:
Если количество предложений инициализатора меньше, чем количество членов, или список инициализаторов полностью пуст, остальные члены инициализируются пустыми списками в соответствии с обычными правилами инициализации списка (которые выполняют инициализацию значения для типов, не относящихся к классам, и неагрегированные классы с конструкторами по умолчанию и инициализация агрегатов для агрегатов).
Так что все элементы data
будет значение инициализировано, за uint32
они будут нулевой инициализируется наконец.
в противном случае объект инициализируется нулями.
Других решений пока нет …