[英]C++ Why do 3 of these constructor calls work, but one doesn't?
我有以下不穩定的程序:
#include <iostream>
using namespace std;
class Baz {
public:
Baz() {cout << "Baz ctor " << endl;}
Baz(int i) : Baz() {}
~Baz() {cout << "Baz dtor " << endl;}
};
int main()
{
cout << "w" << endl;
Baz w;
cout << "x" << endl;
Baz x();
cout << "y" << endl;
Baz y(1);
cout << "z" << endl;
Baz z = Baz();
return 0;
}
這將產生以下輸出:
w
Baz ctor
x
y
Baz ctor
z
Baz ctor
Baz dtor
Baz dtor
Baz dtor
因此,我的問題是:為什么所有這些調用都不調用構造函數?
我一直在研究,但是還沒有找到關於為什么第二個調用不調用構造函數的解釋。 我希望Baz x()
等同於Baz x = Baz()
,就像Baz y(1)
等同於Baz y = Baz(1)
,肯定有我缺少的東西。
您的聲明Baz x();
將x
聲明為不帶參數的函數,該函數返回Baz
。 將其更改為Baz x{};
或Baz x;
調用默認構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.