【发布时间】:2012-11-11 02:35:48
【问题描述】:
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 中编译了这些代码。
【问题讨论】:
-
C++11 允许像第二个示例中那样委派构造函数,而不是在正文中调用它们。出于这个原因,听起来您从一开始就期待一个错误,所以我想确保这一点很清楚。
-
第二个克里斯,您应该阅读有关 C++ 委托构造函数的内容。参考:nullptr.me/2012/01/17/c11-delegating-constructors
标签: c++ class constructor compiler-errors