[英]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.