zoukankan      html  css  js  c++  java
  • More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式

    1. 由于前自增和后自增操作符都是一元运算符,因此重载时通过在后自增中加一个int型参数(哑元参数)加以区分,当后自增被调用时,编译器自动在为该参数指定一个0值。

    2. 前自增操作符返回调用它的对象的引用,后自增操作符返回const 临时对象

    3. 由于前自增是返回的是原对象的引用,因而可以执行类似于++++a这样的式子;

        但是后自增返回的是调用后自增操作符之前的对象的副本,如果后自增操作符返回的临时对象不是const,那么就可能会出现a++++的现象,而第二个++作用的其实是一个临时对象,这显然背离初衷。c++中有一条原则就是“绝对不让用户更改临时对象”(异常处理除外),因为临时对象是由编译器产生的,我们无法主动使用,同时它的生存期也无法由我们来掌握,所以除了用临时对象来充当传入参数或返回值的"载体"外,任何对临时对象的更改都是无意义的,也就被编译器严厉禁止。

        至于不能将临时对象传入接受非const 引用的函数,也是同样道理。也就是说,除非返回的是引用,否则返回的都是临时对象,而主动对临时对象做任何更改操作(除了异常处理外),都是不允许的!

    4. 由于后自增要创建一个对象保存之前对象的副本,所以比前自增效率要低,在两者效果相同的情况下推荐使用前自增。

    5. 如果要同时定义前自增和后自增,对后自增的定义最好以前自增为实现基础,这样可以保证它们行为的一致。

  • 相关阅读:
    Ural 1966 Cycling Roads
    SQL Server 2008 安装(lpt亲测)
    cf Round#273 Div.2
    poj 2318 TOYS
    计算几何好模板
    ❤Friends
    限制pyqt5应用程序 只允许打开一次
    pyqt5 菜单栏+信息提示框
    Android Linux deploy
    system分区解锁
  • 原文地址:https://www.cnblogs.com/reasno/p/4601376.html
Copyright © 2011-2022 走看看