Явная инициализация участников структуры/класса

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.

13
задан Zephon 9 June 2010 в 06:40
поделиться

4 ответа

Пустая форма инициализации в скобках является стандартной в C++ (она явно разрешена грамматикой). См. C Static Array Initialization - how verbose do I need to be? для более подробной информации, если вам интересно.

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

9
ответ дан 2 December 2019 в 00:02
поделиться

{0} - это, по-видимому, C99.

Другой способ инициализации, совместимый с C89 и C++, заключается в следующем "трюке":

struct some_struct{ int a; };

static some_struct zstruct;

some_struct n = zstruct;

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

0
ответ дан 2 December 2019 в 00:02
поделиться

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

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

8
ответ дан 2 December 2019 в 00:02
поделиться

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

-1
ответ дан 2 December 2019 в 00:02
поделиться