问题
Is this:
if(x == a || b){//do something}
same as:
if(x == a || x == b){//do something}
?
I think it is not, because in the first case we evaluate if x equals a and if b is true or false.
In the second case, we evaluate if x equals a and if x equals b. And I understand that in the lazy evaluation if x equals a than we are not evaluating further.
But somebody thinks that in the first case we ask if x equals a or b, so I wanna make sure.
回答1:
No.
In C++, this:
x == a || b // Same as (x == a) || b
Is equivalent to this:
(x == a) || (bool)b
Which evaluates to true
if x
and a
are equal OR if b
evaluates to true
when converted to bool
. In C, on the other hand, it is equivalent to this:
(x == a) || (b != 0)
Which evaluate to true
if x
and a
are equal OR if b
is different from 0 (here we must make the implicit assumption that b
is of integral type, otherwise this won't compile).
On the other hand, this:
(x == a || x == b) // Same as ((x == a) || (x == b))
Evaluates to true
when either x
and a
are equal OR x
and b
are equal (i.e., if x
is either equal to a
or equal to b
) both in C++ and in C.
回答2:
The two expressions are not equivalent. This
if(x == a || b)
is the equivalent of
if( (x == a) || (b))
i.e an OR of x==a
and b
. In C++, if b
evaluates to anything other than 0
or false
, it is taken as true
.
The second one tests whether x==b
instead of simply testing b
.
回答3:
No. In C this is equivalent to:
if(x == a || b != 0)
回答4:
The first reads as "if x is equal to a, or if b is truthy"
The second reads as "if x is equal to a, or if x is equal to b"
回答5:
No.
if (x == a || b)
is equal to
if ((x == a) || (bool)b)
because operator ==
has higher precedence than operator ||
. See Operator Precedence Table.
回答6:
You are almost right, the first case means x equals a OR b is true.
Lazy evaluation means that the expression will be evaluated only until the result is obvious. In an OR expression, for example (x || y)
, the result will be known when x==true
– then the whole expression must be true too. In the case of AND, like (x && y)
, the result will be evident when x==false
. So you are right, if x==a
, we know the answer already and no more work is needed.
来源:https://stackoverflow.com/questions/15052737/variable-x-equals-a-or-b