2017-02-10 56 views
0

让我们说我有一个条件,如果该检查的事件A,B,C,...是真实的一个,如图所示:如果有多个OR子句条件

if(a || b || c || .... || z) 
    do something 

我的问题是,让我们说,条件C成为事实。那么程序会评估d到z的条件还是继续执行“do something”指令?

+1

取决于选择的编程语言,但大多数第一个真正会中断检查 – baao

+1

它通常被称为[短路](https://en.wikipedia.org/wiki/Short-circuit_evaluation)'ing评测 – birdspider

+0

只是测试它... –

回答

0

使用||将评估从左到右的每个条件,直到它达到真值。然后它会停止检查。

if(a || b || c || .... || z) 

如果使用|,则将评估每个条件,而不管结果如何。

if(a | b | c | .... | z) 
0

假设我们有int a = b = c = 1
如果我的++a || ++b;,a会在语句后2,因为一个OR子句只需要其中一个条件需要为真,并且b将保持为1,因为编译器不会继续检查它,因为表达式已经是真的了。
然而,如果我们有--a || ++ba评估为0,就逻辑而言将是false。所以它继续检查其他条件:b将是2,这在逻辑上是正确的。
那么你需要记住什么?

  • Compiler将评估这些条件由左到右
  • 如果或条件之一为真,编译器甚至不继续评估其他条件,是这将是真正的不管对方条件为真或假
  • AND条件需要两个条件都为真,因此如果第一个条件为假,则整个表达式保证为假,因此编译器不会继续评估其他条件。但是,如果第一个是真的,编译器必须检查其他条件是否正确。

这一切都被称为

短路评价

如需更多信息,请单击here.

0

这就是所谓的短路评价。例如,java从左到右检查它;意味着如果c为真,它不会检查该部分的其余部分。

但这不适用于所有语言。 例如,csh从右向左执行短路评估。