我是 C++ 新手,我在 wiki 和这个网站上阅读了一些关于返回值优化的内容,但是我仍然很好奇以下行为是如何发生的:
using namespace std;
class A
{
public:
A() {cout << "A Ctor" << endl;}
A(const A &a) {cout << "A copy Ctor" << endl;}
};
A Foo()
{
A a;
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Foo()" << endl;
Foo();
cout << "Foo() and new object" << endl;
A b(Foo());
return 0;
}
输出是:
Foo()
A Ctor
A copy Ctor
Foo() and new object
A Ctor
A copy Ctor
我的问题是,为什么Foo();
两者A b(Foo());
都只触发了一个复制构造函数调用?这是否意味着返回的复制值Foo()
可以用于b
在该位置构造对象,以便不需要再次调用 b 的构造函数?这是基于视觉工作室 2010。