違いは何ですか?
丸かっこは、非クラス型、またはかっこ内の引数の数に適したコンストラクターを持つ型に対してのみ機能します。
波括弧は、これらに加えて、集約 (struct
コンストラクターのない単純または配列型) にも機能します。したがって、次のように動作します。
struct {
int a,b;
} aggregate;
int array[2];
Foo() : aggregate{1,2}, array{3,4} {}
initializer_list
最後に、中括弧は、引数に一致するパラメーターを持つコンストラクターではなく、適切に型指定された を受け取るコンストラクターに一致します。例えば:
std::vector<int> v1;
std::vector<int> v2;
Foo() :
v1(10,2), // 10 elements with value 2
v2{10,2} // 2 elements with value 10,2
{}
いつ一方を優先する必要がありますか?
initializer_list
初期化が集約または;ではなくコンストラクターを使用していることを明確にしたい場合は、丸括弧を使用してください。または、特定のコンストラクターの使用を強制します。
他の方法ではサポートされていない形式の初期化が必要な場合は、中括弧を優先してください。または、初期化で「正しいことをしたい」だけの場合。
両方が同じことを行う場合、選択は主に美的です。