返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术。它最大的好处是在于: 可以省略函数返回过程中复制构造函数的多余调用,解决 “C++ 中长久以来为人们所诟病的临时对象的效率问题”。
先来看一下测试代码:
#include<iostream>
using namespace std;
class A
{
public:
A():m_ptr(new int(0)){cout << "构造函数" << endl;}
A(const A& a):m_ptr(new int(*a.m_ptr))
{
cout << "深拷贝构造函数" << endl;
}
~A(){ delete m_ptr;cout << "析构函数" << endl;}
private:
int* m_ptr;
};
A GetA()
{
A a;
return a;
}
int main() {
A a = GetA();
return 0;
}
我们的编译器大多数都是默认返回值优化的。
返回值优化的运行结果:
构造函数
析构函数
如果在编译时设置编译选项 -fno-elide-constructors 编译器就会不进行返回值优化,结果如下:
构造函数
深拷贝构造函数
析构函数
深拷贝构造函数
析构函数
析构函数
有没有震惊到你,原来编译器这么给力。我们来捋一下整个过程;
- 首先函数GATA()中&#