是否a && (b = 5/a)
分配5/a
给b
(对于非零a
)?
我的朋友说它没有,但我很困惑为什么它不会。
是否a && (b = 5/a)
分配5/a
给b
(对于非零a
)?
我的朋友说它没有,但我很困惑为什么它不会。
你朋友错了。对于非零a
,该语句a && (b = 5/a)
会将值分配5/a
给b
。
如果a == 0
,则条件将短路并且不会发生分配。
你朋友错了。如果a
评估为真,则必须评估双方,因为&&
必须评估双方才能执行正确的操作。 ||
另一方面不会。当然,您可以通过执行代码并检查b
条件后的值来轻松地自己测试这一点。
在 C 语言中,如果从逻辑简化的角度来看,评估是有意义的,那么它会提前中断。
IE:
if(a && (b=5/a))
如果 a 为零,则逻辑上,整个语句为零/假,如果您忽略系统错误(即:除以零),则不会评估语句的其余部分(例如:“零且任何等于零” ,那么当我们已经知道最终答案总是为零时,为什么还要计算“和任何东西”部分)。
更好的解决方案是:
if(a) {
b=5/a;
} else {
b=0;
printf("ERROR! Attempt to divide by zero would have happened here!");
if(a && b) {
//Do stuff
}
祝你好运!
你朋友说的不对。假设 a 和 b 是整数,那么当 a 为零时 b 保持不变,但当 a 为零时,5 除以 a(int 除法!) ...
'&&' 运算符是短路评估...
使用 gcc 检查了这一点...