看看以下代码:
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函数中调用哪个构造函数?
我跑,它打印“默认”,没有别的。但是,如果我将复制构造函数和赋值运算符设为私有,则不会编译。但它没有以任何方式使用该构造函数。
应该使用哪种构造函数?它是否符合标准保证?这是我不了解的一些规则吗?
实时代码示例:
答案 0 :(得分:1)
编译器可以自由地优化不必要的副本。这并不意味着不需要可访问的拷贝构造函数。
您的代码显示复制初始化,这意味着复制构造函数必须可用。从理论上讲,将调用默认和复制构造函数。
不需要或使用赋值运算符。