【M6】区别increment/decrement操作符的前置(prefix)和后置(postfix)形式

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、后置形式产生临时对象,效率差。并且为了结果的一致性,后置调用前置。因此,在不使用旧值的情况下,强烈建议使用前置形式,因为前置效率高。

你可能感兴趣的:(postfix)