Yue*_*ang 5 c++ operator-overloading
这是C++ Primer第5版的练习:
练习14.14:为什么你认为定义operator +调用operator + =而不是相反的方式更有效?(P.561)
鉴于为实现operator+=和operator+:
Sales_data&
Sales_data::operator+=(const Sales_data &rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
Sales_data
operator+(const Sales_data &lhs, const Sales_data &rhs)
{
Sales_data sum = lhs; // copy data members from lhs into sum
sum += rhs; // add rhs into sum
return sum;
}
Run Code Online (Sandbox Code Playgroud)
在本节末尾(14.3),作者给出了一个提示
定义算术运算符和相关复合赋值的类通常应该通过使用复合赋值来实现算术运算符.
任何人都可以使用事实/例子解释这个提示吗?
原因在于需要进行的复制数量:二进制运算符+创建并返回一个代表总和的新对象,而复合加法赋值运算符则修改该对象。
如果要使用二进制运算符来实现复合运算符,则操作序列如下:
如果您反过来做,则最后一个副本将被消除:
因此,在二进制+程序的实现中使用复合加法赋值更为有效。
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |