Явная инициализация членов структуры / класса - PullRequest
13 голосов
/ 09 июня 2010
struct some_struct{
    int a;
};
some_struct n = {};

n.a будет 0 после этого;

Я знаю, что эта форма инициализации в скобках унаследована от C и поддерживается для совместимости с программами на C, но она компилируется только с C ++, а не с компилятором C. Я использую Visual C ++ 2005.

В C этот тип инициализации

struct some_struct n = {0};

является правильным и инициализирует нулями все элементы структуры.

Является ли пустая пара фигурных скобок формой инициализации? Впервые я увидел эту форму инициализации в руководстве по WinAPI от msdn.

Ответы [ 4 ]

9 голосов
/ 09 июня 2010

Форма инициализации в виде пустых скобок является стандартной в C ++ (это разрешено явно грамматикой).См. C Инициализация статического массива - насколько многословным я должен быть? для получения дополнительной информации, если вам интересно.

Я предполагаю, что он был добавлен в C ++, потому что он может не подходитьзначение 0, которое будет использоваться для значения инициализации по умолчанию во всех ситуациях.

8 голосов
/ 09 июня 2010

Это стандарт в C ++, он не в C.

Синтаксис был введен в C ++, потому что некоторые объекты не могут быть инициализированы с 0, и не было бы никакого общего способа выполнить значение-инициализация массивов.

0 голосов
/ 09 июня 2010

Очевидно, {0} - это C99.

Еще один способ инициализации в C89 и C ++-совместимом способе - это "трюк":

struct some_struct { int a; };

статические some_struct zstruct;

some_struct n = zstruct;

Здесь используется тот факт, что статические переменные предварительно инициализируются с 0'-памятью, в отличие от объявлений в стеке или куче.

0 голосов
/ 09 июня 2010

Я считаю следующую ссылку очень информативной по этому конкретному вопросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...