簡體   English   中英

C ++為什么這些構造函數調用中有3個起作用,而沒有一個起作用?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM