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

  • 相关阅读:
    协程
    多进程
    多线程
    模块进阶
    内建函数
    内建属性
    属性property
    私有化
    深拷贝、浅拷贝
    ==、is
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3567461.html
Copyright © 2011-2022 走看看