すべてのクラス/構造体データメンバーに初期化子がない場合は、統一初期化構文を使用してオブジェクトを構築できます。非スタティックデータメンバーイニシャライザが、統一初期化構文を無効にするのはなぜですか?
struct foo
{
int i;
float f;
};
...
foo bar{ 5, 3.141f };
しかし、1つ以上のメンバに初期化子がある場合、一様初期化構文は無効になります。
struct foo
{
int i;
float f = 0;
};
...
foo bar{ 5, 3.141f }; // Compiler error.
私は、データメンバの初期化子の添加は、自動的に1つ以上のデフォルトコンストラクタを実装し、initialization_list
コンストラクタのデフォルトの実装を抑制することを推測します。それは意図された標準ですか?なぜそれはこのように動作しますか?
「initializer_list」コンストラクタのデフォルト実装はありません。あなたが最初のスニペットで持っていることは* aggregate initialization *と呼ばれます。 – Xeo
@ Xeoのコメントを補完するには、* 8.5.1 [dcl.init.aggr] *と* 8.5.4 [dcl.init.list] *を参照してください。 – syam
関連:http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special/7189821#7189821 –