[英]calling one constructor from another in same class
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 中编译了这些代码。
A();
不是在做你认为它会做的事情。
用double();
替换它double();
或char();
或任何其他类型。 请注意,它有效。
您所做的就是创建该类型的匿名附加实例,然后将其丢弃。 它有没有影响this
和你想象的那样是不行的。
初始值设定项列表在 C++11 中以您期望的方式工作。
这与 C++11 完全没有关系。
正如 Yakk 在第一种情况下所指出的,您可以通过不同的构造函数(默认构造函数)非递归地构造一个匿名成员。
在“B”的情况下; 您尝试从初始列表中初始化一个不存在的成员。 你不必实例A
或A*
中存在A
初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.