如果第一个条件通过,第二个条件是否会被执行?
问题描述:
if(pos == -1 || character_array[pos] == 0) {
}
如果pos是-1,我可以依靠这永远不会崩溃?
与第一个条件失败的AND语句一样。
答
是的,你可以指望这一点。 C标准的相关部分6.5.13:
不同的是按位二进制
&
运营商,该运营商&&
保证 左到右的评价;在第一个操作数的评估之后有一个序列点。如果第一个操作数比较等于 到0
,则不计算第二个操作数。
和6.5.14:
不同的是按位
|
运营商,该运营商||
保证 左到右的评价;在第一个操作数的评估之后有一个序列点。如果第一个操作数比较不等 与0
,则不计算第二个操作数。
例如,下面是惯用C:
if (foo && foo->bar > 10)
+0
+1用于引用规范 – BoltClock
答
这是语言特定的,但如果||
的第一部分为真,大多数语言将忽略语句的其余部分。
同样,如果&&
的一部分为假,大多数语言都将忽略语句的其余部分。
如果要执行一切,然后用单|
和&
运营商来代替。
http://*.com/questions/4613551/good-practice-in-c-lazy-evaluation的[C – stijn
可能重复:在使用&&运算符时,是否存在“懒惰评估”,就像在C++中一样?](http://*.com/questions/3958864/c-is-there-lazy-evaluation-when-using-operator-as-in- c) –