Effective C++学习笔记(十六)

一旦程序员领悟了pass-by-value(传值)的效率牵连层面,往往变成十字军战士,一心一意根除pass-by-value带来的种种邪恶。在坚定追求pass-by-reference的纯度中,他们一定会犯下一个致命错误:开始传递一些references指向其实并不存在的对象,这可不是件好事。

考虑一个用以表现有理数的class,内含一个函数用来计算两个有理数的乘积:

class Rational{

public:

    Rational (int numerator=0,

                   int denominator=1);

private:

    int n,d;

friend   const Rational operator* (const Rational & lhs,const Rational & rhs);   

}

这个版本的operator* 系以by value方式返回其计算结果(一个对象),如果你完全不担心该对象的构造和析构成本,你其实明显逃避你的专业责任,若非必要,没有人会想要

为这样的对象付出太对代价,问题是需要付出任何代价吗?

如果改为reference,就不需要付出代价。但是记住,所谓reference只是一个名称,代表某个既有对象。任何时候看到一个reference声明式,你都应该立刻问自己,它的另外一个名称是什么?因为它一定是某物的另一个名称。

以上述operator* 为例,如果它返回一个reference,后者一定指向既有的Rational对象,内含两个Rational对象的乘积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值