在下面的代码中调用哪个构造函数

Which constructor is called in the following code?

本文关键字:构造函数 调用 代码 在下面      更新时间:2023-10-16

看看下面的代码:

class Test
{
public:
    Test()
    {
        cout << "defaultn";
    }
    Test(const Test&)
    {
        cout << "copyn";
    }
    Test& operator = (const Test&)
    {
        cout << "assignn";
        return *this;
    }
};
int main()
{
    Test t = Test();
}

应该在main函数中调用哪个构造函数?

我运行

,它打印"default",没有其他内容。但是,如果我将复制构造函数和赋值操作符设为私有,则无法编译。但是它并没有使用这个构造函数。

应该使用哪个构造函数?有标准保证吗?这是我不知道的规矩吗?

实时代码示例:

http://ideone.com/lnUEA1

http://ideone.com/nXjAo4

编译器可以自由地优化掉不必要的副本。这并不意味着不需要可访问的复制构造函数。

您的代码显示复制初始化,这意味着必须有复制构造函数可用。理论上,将调用默认构造函数和复制构造函数。

不需要也不使用赋值操作符