这是:
if(x == a || b){//do something}
如同:
if(x == a || x == b){//do something}
?
我认为不是,因为在第一种情况下,我们评估 x 是否等于 a 以及 b 是真还是假。
在第二种情况下,我们评估 x 是否等于 a 以及 x 是否等于 b。而且我明白,在惰性评估中,如果 x 等于 a,我们就不会进一步评估。
但有人认为,在第一种情况下,我们会问 x 是等于 a 还是 b,所以我想确定一下。
这是:
if(x == a || b){//do something}
如同:
if(x == a || x == b){//do something}
?
我认为不是,因为在第一种情况下,我们评估 x 是否等于 a 以及 b 是真还是假。
在第二种情况下,我们评估 x 是否等于 a 以及 x 是否等于 b。而且我明白,在惰性评估中,如果 x 等于 a,我们就不会进一步评估。
但有人认为,在第一种情况下,我们会问 x 是等于 a 还是 b,所以我想确定一下。
没有。
在 C++ 中,这是:
x == a || b // Same as (x == a) || b
相当于这个:
(x == a) || (bool)b
其计算结果为true
ifx
且a
等于 OR ifb
计算结果为true
时转换为bool
. 另一方面,在 C 中,它等价于:
(x == a) || (b != 0)
哪个评估为true
ifx
并且a
等于 OR ifb
与 0 不同(这里我们必须做出整数类型的隐式假设b
,否则将无法编译)。
另一方面,这是:
(x == a || x == b) // Same as ((x == a) || (x == b))
在 C++ 和 C 中计算两者中的true
一个x
和a
相等或x
和b
相等(即,如果x
等于a
或等于)。b
这两个表达式不等价。这个
if(x == a || b)
相当于
if( (x == a) || (b))
即 和 的x==a
或b
。在 C++ 中,如果计算结果为orb
以外的任何值,则将其视为.0
false
true
第二个测试是否x==b
而不是简单地测试b
。
不。在 C 中,这相当于:
if(x == a || b != 0)
第一个读作“如果 x 等于 a,或者如果 b 为真”
第二个读作“如果 x 等于 a,或者如果 x 等于 b”
你几乎是对的,第一种情况意味着x 等于 a OR b 是 true。
惰性求值意味着仅在结果明显之前对表达式进行求值。例如(x || y)
,在 OR 表达式中,结果将是已知x==true
的 - 那么整个表达式也必须为真。在 AND 的情况下,如(x && y)
,结果将在 时显而易见x==false
。所以你是对的,如果x==a
,我们已经知道答案并且不需要更多的工作。