繁体   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