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

13
struct some_struct{
    int a;
};
some_struct n = {};

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

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

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

struct some_struct n = {0};

является правильным и будет нулевым инициализировать всех членов структуры.

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

Теги:
struct
initialization

4 ответа

9
Лучший ответ

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

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

8

Он стандартный в С++, он не в C.

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

0

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

Другой способ инициализации в C89 и С++ - это "трюк":

struct some_struct {   int a; };

static some_struct zstruct;

some_struct n = zstruct;

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

  • 0
    Инициализация с {0} подходит для C89.
-2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню