2012-03-04 4 views
8

Имея структуру, как это в C++ 11:C++ 11 Правильная структура инициализации

struct von 
{ 
    std::string Name; 
    unsigned int ID; 
    std::vector<std::string> Checks; 
}; 

Должен ли он быть инициализирован, как это:

von v = {"",0,{}}; 

Или так:

von v = {}; 

Оба способа, похоже, работают, но компилятор предупреждает о инициализаторах поля ввода-вывода в последнем примере.

Редактировать: Вот мои параметры компилятора: g ++ main.cpp -ansi -Wall -Wextra -WeffC++ -std = C++ 0x. Я использую g ++ (Debian 4.6.2-12) 4.6.2

+2

В вашем примере нет списков инициализаторов, только инициализация списка. Лучшим способом может быть «von v {};». –

+1

von v {}; также жалуется на отсутствие инициализаторов для членов. Это предупреждение инициализатора -Wmissing-field-initializer. – 01100110

+0

Хм, ты прав. Жаль, что вы не можете инициализировать автоматическую переменную ... 'von v {{}, 0, {}};' следующая лучшая вещь. –

ответ

1

Это не требует инициализатора и вообще отлично работает с C++ 03. Edit: (Ok, для инициализации вектора вам нужен C++ 11). При инициализации структуры или массива все явно не заданные значения инициализируются нулями, поэтому, если это то, что вы хотите = {}; будет работать нормально.

Смежные вопросы