考虑一下测试代码:
#include <iostream>
using namespace std;
class Klass
{
public:
Klass()
{
cout << "Klass()" << endl;
}
Klass(const Klass& right)
{
cout << "Klass(const Klass& right)" << endl;
}
};
Klass create(Klass a)
{
cout << "create(Klass a)" << endl;
return a;
}
int main()
{
const Klass result = create(Klass());
}
编译:
g++ -O3 rvo.cpp -o rvo
输出是:
$ ./rvo
Klass()
create(Klass a)
Klass(const Klass& right)
我期待编译器使用 RVO 机制来省略每个 COPY CTOR 调用,以避免复制函数的返回值和参数create()
。为什么不是这样?