C++中的RVO和NRVO

RVO (return value optimization) 和NRVO (named return value optimization) 是C++在处理 “返回一个class object的函数” 时常用的优化技术,主要作用就是消除临时对象的构造和析构成本。目前我正在研究《深度探索C++对象模型》,对于这两种常见的编译器优化有了初步的了解。接下来以一个名叫Point3d的类和一个factory函数为例来总结一下。

Point3d类定义如下:

class Point3d
{
public:
    Point3d(int x = 0, int y = 0, int z = 0): x(x), y(y), z(z)
    {
        cout << "constructor ";
        cout << this->x << " " << this->y << " " << this->z << endl;
    }
    Point3d(const Point3d &other): x(other.x), y(other.y), z(other.z)
    {
        cout << "copy constructor" << endl;
    }
    ~Point3d()
    {
        cout << "destructor" << endl;
    }
    Point3d& operator=(const Point3d &rhs)
    {
        if (this != &rhs)
        {
            this->x = rhs.x;
            this->y = rhs.y;
            this->z = rhs.z;
        }
        cout << "operator = " << endl;
        return *this;
    }
    int x;
    int y;
    int z;
};


我们定义了三个成员变量x, y, z,为了简单起见,我们将它们都定义为public访问属性。接下来,我们定义了该类的默认构造函数、拷贝构造函数、赋值运算符和析构函数,它们都会通过打印一些字符来追踪函数调用。为了简单起见,我们不定义移动构造函数和移动赋值运算符。

接下来我们定义一个函数factory,它产生并返回一个Point3d对象:

Point3d factory()
{
    Point3d po(1, 2, 3);
    return po;
}

整体代码如下࿱
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值