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

  • 相关阅读:
    java 使用相对路径读取文件
    appium 使用过程问题踩坑-笔记
    CentOS下启动Tomcat
    jodis遇到的问题
    CentOS 7.0 防火墙
    sentinel
    keepalived
    在Tomat7上使用Redis保存Session
    Log4j 使用
    java路径问题
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3567461.html
Copyright © 2020-2023  润新知