1) 最初のコード
class A
{
public:
int i;
int b;
A(int temp){
i=temp;
A();
b=0;
}
A(){
b=0;
}
void display(){
printf("%d %d\n",i,b);//1 0
}
};
int main(){
A Aobj(1);
Aobj.display();
return 0;
}
出力: 1 0
2) セカンドコード
class A
{
public:
int i;
int b;
A(int temp) : i(temp), A(), b(0) {}//Error
A() : b(0) {}
void display(){
printf("%d %d\n",b,i);
}
};
int main()
{
A Aobj(1);
Aobj.display();
return 0;
}
両方のコードが同じ動作を示し、同じクラスで一方のコンストラクターから他方のコンストラクターを呼び出すことは許可されていないため、エラーが発生することを期待していました。C++11 ではありません。
では、なぜ初期化リストを使用すると違いが生じるのでしょうか? このコードを g++ 4.3.4 でコンパイルしました。