这是:
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
其计算结果为trueifx且a等于 OR ifb计算结果为true时转换为bool. 另一方面,在 C 中,它等价于:
(x == a) || (b != 0)
哪个评估为trueifx并且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以外的任何值,则将其视为.0falsetrue
第二个测试是否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,我们已经知道答案并且不需要更多的工作。