В С++ 11 у меня есть следующий союз:
union SomeData
{
std::uint8_t Byte;
std::uint16_t Word;
std::uint32_t DWord;
unsigned char String[128];
};
Если я инициализирую объединение таким образом,
SomeData data {};
Гарантировано ли, что все содержимое союза будет "нулевым"? Перефразируй; является пустым списком-инициализатором объединения, функционально эквивалентным memset-union union to Zero?:
memset(&data, 0, sizeof(data));
В частности, меня беспокоят строковые данные. Я хотел бы обеспечить, чтобы вся длина строки содержала нули. Кажется, он работает в моем текущем компиляторе, но действительно ли язык спецификации гарантирует это всегда?
Если нет: существует ли лучший способ инициализировать полную длину объединения до нуля?