2012-03-04 152 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 {};'。 – 2012-03-04 18:07:53

+1

von v {};也抱怨會員失蹤初始化者。這是一個-Wmissing-field-initializer警告。 – 01100110 2012-03-04 18:21:46

+0

嗯,你說得對。這是一個你無法重視的恥辱 - 初始化一個自動變量......'von v {{},0,{}};'是次好的事情。 – 2012-03-04 18:46:48

回答

1

這並不需要initializer_list,並且在C++ 03下工作得很好。編輯:(對於向量的初始化,你需要C++ 11)在一個結構或數組初始化中,所有未明確給定的值都是零初始化的,所以如果這就是你想要的= {};將工作得很好。