Gotw 80には、次の例が含まれています。
// Example 1
//
#include <string>
using namespace std;
class A
{
public:
A( const string& s ) { /* ... */ }
string f() { return "hello, world"; }
};
class B : public A
{
public:
B() : A( s = f() ) {}
private:
string s;
};
int main()
{
B b;
}
この記事では、s = f()
オブジェクトの有効期間と作成順序が原因で、行が正しくない理由について説明します。この記事では、当時、エラーはコンパイラによって検出されなかったと述べています。
ただし、初期化の順序とオブジェクトの有効期間の問題を無視するとs = f()
、コンストラクターのパラメーターリストで構文的に合法になる方法がわかりません-パラメーターリストでメンバーを初期化しようとしているようです(またはおそらくデフォルトを宣言しています)価値)。この構文が何をしようとしているのか、誰か説明できますか?