m0s*_*afa 4 c++ java short-circuiting logical-operators
考虑这段代码(C++):
int x = -4 , y = 5 ;
bool result = x > 0 && y++ < 10 ;
Run Code Online (Sandbox Code Playgroud)
表达式(X> 0)将被首先计算,并且因为(X> 0 =假),并且由于短路评价,其他表达(Y ++ <10)将不会被评价和y的值将保持5 .
现在考虑以下代码:
int x = -4 , y = 5 ;
bool result = (x > 0) && (y++ < 10) ;
Run Code Online (Sandbox Code Playgroud)
可以预期,在括号中的表达式将被首先计算,使得逻辑AND被执行时,表达之前(Y ++ <10)将已被评估和y的值已成为6,但现实情况是,y的值仍然是5.这意味着即使使用括号,评估也会被短路,并且忽略表达式(y ++ <10).
这个案子有什么解释?
Luc*_*ore 10
解释是在问题 - 短路.
在C++中,&&(以及||对于此问题)的评估保证是从左到右,并且一旦false遇到(分别true为||),就保证评估停止.
类似于Java我猜.
括号是冗余的,在这种情况下不相关 - 它与运算符优先级无关.它只与&&工作方式有关:
实际上,这两个版本
x > 0 && y++ < 10
(x > 0) && (y++ < 10)
Run Code Online (Sandbox Code Playgroud)
是等价的,因为它++具有最高的优先级,其次是<,>,最后&&.小心翼翼,你应该把它写成:
(x > 0) && ((y++) < 10)
Run Code Online (Sandbox Code Playgroud)
1
&&操作员从左到右分组.操作数都隐式转换为bool类型(第4节).如果两个操作数都是true,false则结果为真.与&不同,&&保证从左到右的评估:如果第一个操作数是,则不评估第二个操作数false.(强调我的)
| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |