C++11 では、次のように "brace-or-equal-initializer" (標準の単語) を使用してクラス内の初期化を行うことができます。
struct Foo
{
/*explicit*/ Foo(int) {}
};
struct Bar
{
Foo foo = { 42 };
};
しかし、コメントを外すとexplicit
、コンパイルされなくなります。GCC 4.7 および 4.9 は次のように述べています。
error: converting to ‘Foo’ from initializer list would use explicit constructor ‘Foo::Foo(int)’
これは驚くべきことでした。このコードがコンパイルされないのは、本当に C++11 標準の意図ですか?
=
修正を削除します。Foo foo { 42 };
しかし、個人的には、何十年もフォームに慣れている人にこれを説明するのは難しいと思います=
。また、標準では「ブレースまたはイコールイニシャライザー」を参照しているため、古き良き方法がなぜ明らかではないこのシナリオでは機能しません。