If statement 带有多个OR子句的If条件

If statement 带有多个OR子句的If条件,if-statement,or-condition,If Statement,Or Condition,假设我有一个if条件,它检查事件a,b,c,。。。如图所示: if(a || b || c || .... || z) do something 我的问题是,让我们假设条件c是真的。然后,程序将计算条件d到z,还是继续执行“做点什么”指令?使用| |将从左到右计算每个条件,直到达到一个正确的值。然后它将停止检查 if(a || b || c || .... || z) 如果使用|,则无论结果如何,都将计算每个条件 if(a | b | c | .... | z) 假设我们有inta

假设我有一个if条件,它检查事件a,b,c,。。。如图所示:

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

我的问题是,让我们假设条件c是真的。然后,程序将计算条件d到z,还是继续执行“做点什么”指令?

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

if(a || b || c || .... || z)
如果使用|,则无论结果如何,都将计算每个条件

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

假设我们有
inta=b=c=1

如果我做了
++a | |++b
a
将在语句后变为2,因为OR子句只需要其中一个条件为true,而
b
将保持为1,因为编译器不会继续检查它,因为表达式已经为true。
但是,如果我们有
--a | |++b
a
的计算结果为0,这在逻辑上是
false
。因此它继续检查另一个条件:
b
将为2,这在逻辑上是正确的。
那么你需要记住什么呢

  • 编译器从左到右计算这些条件
  • 如果一个或条件为真,编译器甚至不会继续计算另一个条件,不管另一个条件是真还是假,它都将为真
  • 条件需要两个条件都为true,因此如果第一个条件为false,则整个表达式保证为false,因此编译器不会继续计算另一个条件。但是,如果第一个条件为真,编译器必须检查其他条件是否也为真
这一切都叫做

短路评估


有关详细信息,请单击“短路评估”。 例如,java从左到右检查它;意味着如果c为真,它将不检查该部分的其余部分

但并非所有语言都是如此。
例如,csh从右到左执行短路评估。

取决于所选的编程语言,但大多数情况下,第一个true会中断检查。这通常被称为“正在评估,请测试它…”。。。