初识c++(31)之返回值优化

返回值优化(RVO)是C++的一种编译优化技术,用于避免函数返回过程中临时对象的多余复制。通过RVO,可以提高效率,减少构造函数的调用。本文通过代码示例解释了RVO的工作原理,并探讨了非RVO情况下额外的拷贝构造函数调用。此外,还提到了C++11引入的右值引用作为解决此类问题的语法手段。
摘要由CSDN通过智能技术生成

返回值优化(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 编译器就会不进行返回值优化,结果如下:

构造函数
深拷贝构造函数
析构函数
深拷贝构造函数
析构函数
析构函数

有没有震惊到你,原来编译器这么给力。我们来捋一下整个过程;

  1. 首先函数GATA()中&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值