调用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+是更有效率的。
你也会觉得这个问题对你有帮助: