In C does the logical operator end if one side of a || is true?
C:have the followingP></
1 | return (abc(1) || abc(2)); |
如果我
不,不会。这叫做"短路",是一种常见的流量控制机制:
对于
对于
不,根据标准,如果
如果
与
这背后的想法是:
1 2 3 4 5 | true OR whatever -> true false OR whatever -> whatever false AND whatever -> false true AND whatever -> whatever |
这来自布尔代数
If abc(1==1) returns true will then call abc(2) ?
不,不会的。这种行为称为短路。它是由C和C++标准保证的。
C11(n1570), § 6.5.13 Logical AND operator
Unlike the bitwise binary
& operator, the&& operator guarantees left-to-right evaluation; if the second operand is evaluated, there is a sequence point between the evaluations of
the first and second operands. If the first operand compares equal to 0, the second operand is not evaluated.
(重点是我的。)
这同样适用于
在C语言中,逻辑
与
只有当
根据C99规范,逻辑或运算符表示
The || operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares unequal to 0, the second operand is not evaluated.
不,只有当左边的语句是
您还可以阅读:用于比较的和或&;和&;之间的差异
不,这实际上是非常重要的,并且在逻辑运算符从左到右进行计算的标准中定义了这一点。当可以在不进一步计算操作数的情况下确定值时,将停止计算。至少我百分之百相信
这是一个非常重要的问题,因为由于预期的结果可能不同,因此操作数的计算不能通过顺序重组隐式并行或优化。
例如,广泛使用情况下的运行时故障,如