Агрегатная инициализация инициализирует элементы данных объекта класса aggrete, тогда как инициализация значения агрегата будет сначала нулевой инициализировать, а также обнуляет байты заполнения, как показано в следующем спецификация цитатаАгрегация по отношению к значению, инициализирующему объект совокупного класса с заполнением
если Т (возможно, резюме квалифицированного) несрастание типа класса, каждый не-статический член данных и каждый базовый класс подобъект равен нуль инициализирован и заполнение инициализируются нулевых биты;
Означает ли это, что, как правило, следует избегать инициализации агрегированные с использованием ()
Структуры и предпочитают {}
вместо потому что последний не должен гарантировать, что обивка биты равны нулю?
Если ответ на вышеизложенное «нет», существуют случаи, когда реализации не заполняют заполнение {}
, а делают с ()
? И среди этих случаев лучший выбор для программиста?
[Clang] (http://coliru.stacked-crooked.com/a/e30e266d90c16662) соблюдает правило, а [gcc] (http://coliru.stacked-crooked.com/a/eff8609fc153d914) и MSVC все еще обнуляет байты заполнения в моем тесте. – Jamboree