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

xiaoxiao2021-02-28  67

考虑下面的类:

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++会先调用拷贝构造函数构造一个临时对象,然后用临时对象进行加法,第二个函数更加

易懂。

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

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

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

转载请注明原文地址: https://www.6miu.com/read-66602.html

最新回复(0)