Sla*_*eek 1 c++ copy-constructor
对于以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
关于何时调用复制构造函数,我真的很困惑?就像我运行上面的程序一样,不会调用复制构造函数.这意味着如果我搞乱传递给复制构造函数的参数(消除const关键字),它不应该显示任何编译器错误.但它的表现
"没有用于调用'Test :: Test(Test)'的匹配函数"
而且,fun()返回一个test类型的对象,它在fun()执行期间创建.为什么不在这里调用复制构造函数?
int main()
{
fun();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我对主函数进行以下更改,为什么复制构造函数只调用一次,而不是两次?
int main()
{
Test t2 = fun();
Test t3 = t2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)