zoukankan      html  css  js  c++  java
  • 20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析

    大家,都知道"&&","||"拥有"短路"功能

    • 比如a=(0&&b) :  由于第一个操作数为0,所以不会去判断b的内容,直接执行a=0
    • 比如a=(-100||b): 由于-100不为0,所以不会去判断b的内容,直接执行a=1

    可以参考下面代码:

    运行打印:

    并没有调用func(100)函数,同样"||"逻辑操作符也具有拥有"短路"功能

    ||"就不会具备"短路"功能

    参考以下示例:

    打印:

    从结果看出,调用了func(t0)和func(t1),并且调用顺序是从右往左的.

    这是因为执行func(t0)&&func(t1)时:

    编译器实际是执行的operator && (func(t0), func(t1))函数,所以需要进入func()初始化两个参数

    然后通过下面代码, 发现参数初始化顺序是从右往左的:

    运行打印:

     

      

    首先回顾下编译器自带的","逗号操作符

    • 逗号表达式前N-1子表达式不需要返回值
    • 逗号表达式从左往右计算,且最终的值等于最后一个表达式的值

    比如:

    • 逗号表达式,通过()圆括号来表示

    比如:

    编译器实际是执行的operator , (t1+1, t2+2)重载操作符函数.

    由于初始化参数的顺序是从右往左初始化的,所以执行顺序变反了,先执行t2+2.

    总结:

    其实使用编译器自带的","逗号操作符,用在对象上也能成功,因为","主要就是用来隔离代码运行,并返回最后一个参数的值.不会参与对象的运算.

    所以在以后的开发中,不要重载","逗号操作符


    文章来源:https://www.cnblogs.com/lifexy/p/8660910.html

  • 相关阅读:
    ovs tag
    从数据库分析OpenStack创建虚机流程
    Neutron中的二层网络服务架构
    Failed to bind port
    OpenStack网络参数segment
    OpenStack与SDN控制器的集成
    HDU 3709 Balanced Number
    HDU 5787 K-wolf Number
    HDU 5803 Zhu’s Math Problem
    CodeForces 258B Little Elephant and Elections
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9673939.html
Copyright © 2011-2022 走看看