2012-03-04 8 views
8

C++ 11でこのような構造を有する:C++ 11の適切な構造の初期化

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

は、それが次のように初期化されなければならない:

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

またはこのような:

von v = {}; 

両方の方法で動作するようですが、コンパイラは後者の例では-Wmissing-field-initializersについて警告します。

編集:ここに私のコンパイラオプションがあります:g ++ main.cpp -ansi -Wall -Wextra -Weff ++ -std = C++ 0x。私はg ++(Debian 4.6.2-12)を使用しています。4.6.2

+2

あなたの例ではイニシャライザリストはなく、リストの初期化のみがあります。最善の方法はvon v {};です。 –

+1

von v {};メンバーのイニシャライザが見つからないという不満もあります。これは、ワイシングフィールド初期化の警告です。 – 01100110

+0

ええ、そうです。自動変数を値を初期化できないのは残念です... 'von v {{}、0、{}};は次善のものです。 –

答えて

1

これはinitializer_listをまったく必要とせず、C++ 03で完璧に動作します。編集:(OK、C++ 11が必要なベクトルの初期化)構造体または配列の初期化では、明示的に指定されていない値はゼロで初期化されます。ちょうどうまくいくでしょう。