在具有多个条件的 if 语句中,如果第一个条件的结果明确,是否会执行第二个条件?
example:
if(i>0 && array[i]==0){
}
如果我交换条件,i 的负值可能会发生段错误,但这样就不会发生段错误。我可以确定这总是有效还是必须使用嵌套的 if 语句?
这种类型的评估称为短路 http://en.wikipedia.org/wiki/Short-circuit_evaluation。
一旦结果100%明确,就不再继续评估。
这实际上是一种常见的编程技术。
例如,在 C++ 中你经常会看到类似这样的内容:
if (pX!=null && pX->predicate()) { bla bla bla }
如果更改条件的顺序,则可能会调用空指针上的方法并导致崩溃。当您有指向该结构的指针时,C 中的类似示例将使用该结构的字段。
你可以用 or 做类似的事情:
if(px==null || pX->isEmpty()} { bla bla bla }
这也是避免 if 条件中的副作用通常是个好主意的原因之一。
例如,假设您有:
if(x==4 && (++y>7) && z==9)
If x
is 4
, then y
无论值如何都会增加z
or y
,但如果x
is not 4
,它根本不会增加。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)