在以下代码中调用哪个构造函数?

时间:2014-07-01 12:16:03

标签: c++

看看以下代码:

class Test
{
public:
    Test()
    {
        cout << "default\n";
    }

    Test(const Test&)
    {
        cout << "copy\n";
    }

    Test& operator = (const Test&)
    {
        cout << "assign\n";
        return *this;
    }
};

int main()
{
    Test t = Test();
}

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

我跑,它打印“默认”,没有别的。但是,如果我将复制构造函数和赋值运算符设为私有,则不会编译。但它没有以任何方式使用该构造函数。

应该使用哪种构造函数?它是否符合标准保证?这是我不了解的一些规则吗?

实时代码示例:

http://ideone.com/lnUEA1

http://ideone.com/nXjAo4

1 个答案:

答案 0 :(得分:1)

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

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

不需要或使用赋值运算符。