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

来源:互联网 发布:空间电压矢量 知乎 编辑:程序博客网 时间:2024/05/20 18:44

一旦程序员领悟了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对象的乘积。

0 0
原创粉丝点击