使用op=(复合形式)替代op(独身形式)的优点

考虑下面的类:

class Rational{

public:

....

Rational& operator +=(const Rational& rhs);

Rational& operator -=(const Rational& lhs);

};

Rational& operator +=(const Rational& rhs,const Rational& lhs)

{

return Rational(lhs) += rhs;

}

这个例子的好处就是维护的时候更加方便,只要修改op=(复合形式)就可以了。

主要的优点有两个:

1.可以提高效率,op= 不需要产生临时对象,减少了临时对象析构跟构造的开销。op=直接返回的是前面已经构造好的对象。

2.可以为客户提供两种形式,客户可以自行在效率与便利之间取舍。

下面再看一个例子:

template<class T>

const T operator+(const T& lhs,const T& rhs)

{return T(lhs) += rhs;}

template<class T>

const T operator+(const T& lhs,const T& rhs)

{

T result(lhs);

return result += rhs;

}

这两个函数第一个函数比较难以理解,c++会先调用拷贝构造函数构造一个临时对象,然后用临时对象进行加法,第二个函数更加

易懂。

但是,第一个函数,编译器可以进行返回值优化,第二个不行,这也就是说第一种可以提高效率。

而且,一个匿名对象比实际对象更容易消除。

综上:如果你设计程序库,则你可以两者兼有,若你是应用软件开发者则应该使用复合形式的版本。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值