Variable x equals a or b

折月煮酒 提交于 2019-12-13 11:28:09

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!