调用operator+=来定义operator+比其他方法更有效?

如题,下面给出operator+=和operator+的实现

 1 Sales_data& 
 2 Sales_data::operator+=(const Sales_data &rhs)
 3 {
 4     units_sold += rhs.units_sold;
 5     revenue += rhs.revenue;
 6     return *this;
 7 }
 8 
 9 Sales_data
10 operator+(const Sales_data &lhs, const Sales_data &rhs)
11 {
12     Sales_data sum = lhs;
13 sum += rhs; 14 return sum; 15 }

    上面的代码是用调用operator+来定义operator+=的。

    首先operator+有两个参数,其参数类型为const,是不需要改变的,其返回类型为Sales_data类型的一个拷贝。不过每次都需要在函数体内定义一个临时变量,用来返回拷贝。

    而operator+=有一个参数,其参数类型为const,不需要改变,其返回类型为Sales_data类型的引用。每次不需要在函数内创建临时变量,直接可返回*this。

    如果用operator+来定义operator+=的话,则不论调用operator+还是operator+=,每次都会创建一个Sales_data的临时变量。

    以下为调用operator+来定义operator+=的代码:

 1 Sales_data& Sales_data::operator+=(const Sales_data &rhs)
 2 {
 3     Sales_data old_data = *this;
 4     *this = old_data + rhs;
 5     return *this;
 6 }
 7 
 8 Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs)
 9 {
10     Sales_data sum;
11     sum.units_sold = lhs.units_sold + rhs.units_sold;
12     sum.revenue = lhs.revenue + rhs.revenue;
13     return sum;
14 }

 

    所以说调用operstor+=来定义operator+是更有效率的。

    你也会觉得这个问题对你有帮助:

http://stackoverflow.com/questions/21071167/why-is-it-more-efficient-to-define-operator-to-call-operator-rather-than-the

posted @ 2016-04-09 13:44  clairvoyant  阅读(4143)  评论(2编辑  收藏  举报