对于以下代码:
#include<iostream>
using namespace std;
class Test
{
public:
Test(const Test &t) { cout<<"Copy constructor called"<<endl;}
Test() { cout<<"Constructor called"<<endl;}
};
Test fun()
{
cout << "fun() Called\n";
Test t;
return t;
}
int main()
{
Test t1;
Test t2 = fun();
return 0;
}
我真的很困惑何时调用复制构造函数?就像我正在运行上面的程序复制构造函数一样。这意味着如果我弄乱了传递给复制构造函数的参数(消除 const 关键字),它不应该显示任何编译器错误。但它的表现
“调用‘Test::Test(Test)’没有匹配的函数”
此外, fun() 正在返回一个 test 类型的对象,该对象是在 fun() 执行期间创建的。为什么这里不调用复制构造函数?
int main()
{
fun();
return 0;
}
另外,如果我对主函数进行以下更改,为什么只调用一次而不是两次复制构造函数?
int main()
{
Test t2 = fun();
Test t3 = t2;
return 0;
}