博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结合短路法和逗号表达式,代替if和三目运算符
阅读量:4124 次
发布时间:2019-05-25

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

C/C++系列语言中,if-else语句是最主要的条件分支语句:

if(A) B;
else C;
其功能就是如果A成立,则执行B,否则执行C。类似的还是三目运算符:
A?B:C;
其功能与if语句类似,并且由于是表达式,它也有返回值,返回的就是被实际执行的语句的返回值。但如果既不使用if语句又不使用三目运算法,有没有办法也进行条件分支呢?答案是肯定的,方式就是使用“短路法”。
C/C++系列语言的逻辑运算法&&和||有一个副作用,就是有短路效果。对于与运算法&&来说,只有被它连接的两个表达式都成立时才返回值,那么如果左边的表达式结果为假,那么无论右边的表达式结果如何,结果都为假,此时就不会再执行右边的表达式了。或运算符||与之类似,只要有一个表达式为真结果就为真,那么当它左边的表达式为真时,右边的就不会被执行了。利用这种特性,即可以写出取代if语句和三目运算法的代码:
A && (B, 1) || C;
这段代码使用与、或运算符以及逗号把三个语句A、B、C以及常数1连接起来,其功能与if语句是非常类似的。具体来说,当表达式A返回真值时,由于A与B之间是与运算符,仍需要再判断B的值,所以起来了“如果A成立则执行B”的作用,但若B的返回值为假,就会进一步判断C的值,这与开始的要求不符,因此把B改造为逗号表达式,让它总是返回“1”,这样一来就不会执行C了。如果A不成立,那么B已无需执行,只要再判断C的值即可,这就实现了“若A不成立则执行C”的要求。
当然这种写法也有一些限制,B和C的部分不适合写太长,并且必须有返回值,否则编译器会报编译时错误。
这个技巧有什么用?我也不知道,可能唯一的用处就是能让程序短一点点,难懂一点点,实际编程中应该不会使用到,但对于理解短路法编程的作用、逗号表达式的作用还是有帮助的。 

转载地址:http://acopi.baihongyu.com/

你可能感兴趣的文章
Java异常分类
查看>>
项目中的jackson与json-lib使用比较
查看>>
Jackson Tree Model Example
查看>>
j2ee-验证码
查看>>
js-高德地图规划路线
查看>>
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>