我在理解 C++ 复制构造函数时遇到了一些问题,希望有人能帮助我。
据我所知,当函数返回类的实例时(除其他外)会调用复制构造函数。
#include <iostream>
using namespace std;
class Test
{
int a;
public:
Test(int a) : a(42)
{}
// Copy constructor
Test(const Test& other)
{
cout << "copy constructor" << endl;
}
};
Test test_function()
{
Test a(3);
return a;
}
int main()
{
test_function();
return 0;
}
那么,如果我执行这段代码,复制构造函数永远不会被调用?为什么?然后返回哪个对象?
此外,如果我更换线路
test_function();
到
Test b = test_function();
复制构造函数都没有被调用——为什么不呢?
提前致谢
编辑:将功能更改为:
Test test_function()
{
Test a(3);
Test b(34);
if (4 < 2)
return a;
else
return b;
}
可以看到复制构造函数调用,因为编译器无法使用 RVO。