博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
阅读量:5199 次
发布时间:2019-06-13

本文共 689 字,大约阅读时间需要 2 分钟。

 

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

  • 比如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/xiongjim/p/9673939.html

你可能感兴趣的文章
笔试题拾遗
查看>>
节点树
查看>>
与虚拟机Oracle连接出现ora-12154问题的解决
查看>>
JavaScript对象(一)
查看>>
Kinect 开发 —— 全息图
查看>>
Sublime View In Browser
查看>>
linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库
查看>>
[DP题]采药
查看>>
201421123091 ONLY-JN
查看>>
FPGA机器学习之机器学习的n中算法总结1
查看>>
Bootstrap的js插件之轮播(carousel)
查看>>
linux自旋锁
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
IPTABLES详解
查看>>
[SHOI2008]cactus仙人掌图[圆方树+树dp]
查看>>
Javascript Number类型常见迷惑点
查看>>
Linux 下tomcat 的重新启动
查看>>
利用node js 来创建一个服务器
查看>>
objectiveC【语法】修饰符 static extern const
查看>>
史上最全的maven pom.xml文件教程详解
查看>>