0

假设我有一个 if 条件,它检查事件 a、b、c、... 之一是否为真,如图所示:

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

我的问题是,让我们说条件 c 结果为真。那么程序将评估条件 d 到 z 还是继续执行“做某事”指令?

4

3 回答 3

0

这称为短路评估。例如java从左到右检查它;表示如果 c 为真,它将不检查该部分的其余部分。

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

于 2017-02-10T13:26:18.720 回答
0

假设我们有int a = b = c = 1.
如果我这样做++a || ++b;a将在语句之后为 2,因为 OR 子句只需要条件之一需要为真并且b将保持为 1,因为编译器不会继续检查它,因为表达式已经为真。但是,
如果我们有,则评估为 0,这将在逻辑方面。所以它继续检查另一个条件:将是 2,这在逻辑上是正确的。 那么你需要记住什么? --a || ++bafalseb

  • 编译器从左到右评估这些条件
  • 如果其中一个或条件为真,编译器甚至不会继续评估另一个条件,无论另一个条件是真还是假,它都会为真
  • AND 条件需要两个条件都为真,因此如果第一个条件为假,则保证整个表达式为假,因此编译器不会继续评估另一个条件。但是,如果第一个条件为真,编译器必须检查另一个条件是否也为真。

这一切都被称为

短路评估

更多信息,请点击这里。

于 2017-02-10T13:20:09.853 回答
0

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

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

如果使用 |,则无论结果如何,都会评估每个条件。

if(a | b | c | .... | z)
于 2017-02-10T13:11:53.490 回答