假设我有一个 if 条件,它检查事件 a、b、c、... 之一是否为真,如图所示:
if(a || b || c || .... || z)
do something
我的问题是,让我们说条件 c 结果为真。那么程序将评估条件 d 到 z 还是继续执行“做某事”指令?
假设我有一个 if 条件,它检查事件 a、b、c、... 之一是否为真,如图所示:
if(a || b || c || .... || z)
do something
我的问题是,让我们说条件 c 结果为真。那么程序将评估条件 d 到 z 还是继续执行“做某事”指令?
这称为短路评估。例如java从左到右检查它;表示如果 c 为真,它将不检查该部分的其余部分。
但这不适用于所有语言。例如 csh 从右到左执行短路评估。
假设我们有int a = b = c = 1
.
如果我这样做++a || ++b;
,a
将在语句之后为 2,因为 OR 子句只需要条件之一需要为真并且b
将保持为 1,因为编译器不会继续检查它,因为表达式已经为真。但是,
如果我们有,则评估为 0,这将在逻辑方面。所以它继续检查另一个条件:将是 2,这在逻辑上是正确的。
那么你需要记住什么? --a || ++b
a
false
b
这一切都被称为
短路评估
更多信息,请点击这里。
使用 || 将从左到右评估每个条件,直到它达到一个正确的值。然后它将停止检查。
if(a || b || c || .... || z)
如果使用 |,则无论结果如何,都会评估每个条件。
if(a | b | c | .... | z)