前置++:返回引用原因:
- 保证和内建类型一致,++++i,是合法的
后置++:返回一个const值的原因
- 避免连加操作,因为i++++是不合法的,和内建类型不一致;
- 避免混淆,因为第二个++是对第一个++返回对象的操作,i只被累加了一次。
注意:
- 参数后置++中参数只起到标识作用,不需要具体的命名参数,可以避免不必要的警告;
- 后置++会导致临时对象的产生,所以自建类型应该尽量使用前置++;
- 为了减少维护成本,可以用前置++实现后置++,改动的时候只需要改动一个函数即可。
class UPInt {
public:
UPInt& operator++() {
*this += 1;
return *this;
}
const UPInt operator++(int) {
UPInt oldValue = *this;
++(*this);
return oldValue;
}
}
UPInt i;
++i; // 调用 i.operator++()
i++; // 调用 i.operator++(0)