struct some_struct{
int a;
};
some_struct n = {};
n.a после этого будет 0;
Я знаю, что эта фигурная скобка формы инициализации наследуется от C и поддерживается для совместимости с C-программами, но это только компилируется с С++, а не с C-компилятором. Я использую Visual С++ 2005.
В C этот тип инициализации
struct some_struct n = {0};
является правильным и будет нулевым инициализировать всех членов структуры.
Является ли пустая пара фигурных скобок формой стандартизации инициализации? Я впервые увидел эту форму инициализации в учебнике WinAPI из msdn.
Пустая форма инициализации фигурных скобок является стандартной в С++ (она явно разрешена грамматикой). См. C Инициализация статического массива - насколько подробно я должен быть? для получения более подробной информации, если вам интересно.
Я предполагаю, что он был добавлен в С++, потому что может быть нецелесообразно использовать значение 0 для значения init по умолчанию во всех ситуациях.
Он стандартный в С++, он не в C.
Синтаксис был введен в С++, потому что некоторые объекты не могут быть инициализированы с помощью 0, и не было бы общего способа выполнения инициализации значений массивов.
Очевидно, что {0} - C99.
Другой способ инициализации в C89 и С++ - это "трюк":
struct some_struct { int a; };
static some_struct zstruct;
some_struct n = zstruct;
Это использует тот факт, что статические переменные предварительно инициализируются 0-й памятью, что противоречит объявлениям в стеке или куче.
Я считаю, что следующая ссылка очень информативна по данному вопросу
{0}
подходит для C89.