结合短路法和逗号表达式,代替if和三目运算符

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的部分不适合写太长,并且必须有返回值,否则编译器会报编译时错误。
这个技巧有什么用?我也不知道,可能唯一的用处就是能让程序短一点点,难懂一点点,实际编程中应该不会使用到,但对于理解短路法编程的作用、逗号表达式的作用还是有帮助的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值