2011-07-27 53 views
0

例如:如果第一个条件通过,第二个条件是否会被执行?

if(pos == -1 || character_array[pos] == 0) { 

} 

如果pos是-1,我可以依靠这永远不会崩溃?

与第一个条件失败的AND语句一样。

+0

http://stackoverflow.com/questions/4613551/good-practice-in-c-lazy-evaluation的[C – stijn

+0

可能重复:在使用&&运算符时,是否存在“懒惰评估”,就像在C++中一样?](http://stackoverflow.com/questions/3958864/c-is-there-lazy-evaluation-when-using-operator-as-in- c) –

回答

2

是的,你可以指望这一点。 C标准的相关部分6.5.13:

不同的是按位二进制&运营商,该运营商&&保证 左到右的评价;在第一个操作数的评估之后有一个序列点。如果第一个操作数比较等于 到0,则不计算第二个操作数。

和6.5.14:

不同的是按位|运营商,该运营商||保证 左到右的评价;在第一个操作数的评估之后有一个序列点。如果第一个操作数比较不等 与0,则不计算第二个操作数。

例如,下面是惯用C:

if (foo && foo->bar > 10) 
+0

+1用于引用规范 – BoltClock

2

这是语言特定的,但如果||的第一部分为真,大多数语言将忽略语句的其余部分。

同样,如果&&的一部分为假,大多数语言都将忽略语句的其余部分。

如果要执行一切,然后用单|&运营商来代替。

相关问题