这个问题已经在这里有一个答案:
- 什么是复制省略和返回值优化? 4个回答
还有就是C ++代码的一部分我真的不明白。 此外,我不知道我应该去哪里寻找有关它的信息,所以我决定问一个问题。
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
Test();
Test(Test const & src);
Test& operator=(const Test& rhs);
Test test();
int x;
};
Test::Test()
{
cout << "Constructor has been called" << endl;
}
Test::Test(Test const & src)
{
cout << "Copy constructor has been called" << endl;
}
Test& Test::operator=(const Test& rhs)
{
cout << "Assignment operator" << endl;
}
Test Test::test()
{
return Test();
}
int main()
{
Test a;
Test b = a.test();
return 0;
}
为什么输入我得到的是
Constructor has been called
Constructor has been called
? a.test()调用创建一个新的实例“测试()”,所以这就是为什么显示第二个消息。 但是,为什么没有拷贝构造函数或赋值叫什么名字? 如果我改变“回归测试()”到“回归*(新测试())”,然后拷贝构造函数被调用。
那么,为什么不叫第一次?