クラスのイニシャライザ リスト構文を使用できるかどうかは、クラス フィールドにデフォルト値があるかどうかに依存することがわかりました。なんで?
正確には、次のコードを検討してください。
class S
{
public:
int a;
};
...
int a;
S s{ a };
問題なくコンパイルされます。しかし、クラス フィールドにデフォルト値を追加すると、ビルドが停止します。
class S
{
public:
int a = 0;
};
...
int a;
S s{ a };
エラー 1 エラー C2440: 'initializing': 'initializer-list' から 'S' に変換できません
なんで?そのようなコンストラクターの生成に他に何が影響しますか?