1、考虑++(--的情况是一样的),前置是累加然后取出,后置是取出然后累加。
2、重载方法根据形参表的不同区分,问题来了,前置和后置形式都没有形参,因此没法区分。怎么办?
对于后置增加一个形参int,在方法内并不使用这个形参,因此去掉形参名。
3、考虑UPint(unlimited precision int)类,对于前置,返回引用,实现如下:
UPint& UPint::operator++()
{
*this+=1;
return *this;
}
4、考虑后置,后置返回老的对象。为了保证前置和后置的结果一致性,和代码的复用,使用后置调用前置。如下:
const UPint UPint::operator++(int)
{
UPint old = *this;
++(*this);
return old;
}
5、考虑,为什么后置++返回const对象?
方法返回const对象,是为了禁止用户对返回值赋值。考虑,++++i; 相当于对i累加两次。如果后置++不是返回const对象,对于i++++;程序员期望也是对i累加两次,但实际上做了什么事情呢?
第一个++返回一个临时对象,对i加1,第二个++是对临时对象加1,这显然违反直觉。并没有对i累加两次,因此方法返回const对象,禁止用户使用i++++
6、后置形式产生临时对象,效率差。并且为了结果的一致性,后置调用前置。因此,在不使用旧值的情况下,强烈建议使用前置形式,因为前置效率高。