Переменная x равна a или b

Это

if(x == a || b){//do something}

такой же как

if(x == a || x == b){//do something}

?

Я думаю, что это не так, потому что в первом случае мы оцениваем, если x равен a, и если b равно true или false, а во втором случае мы оцениваем, если x равен a и если x равен b. И я понимаю, что в ленивой оценке, если х равен а, мы не оцениваем дальше.

Но кто-то думает, что в первом случае мы спрашиваем, равен ли х а или б, поэтому я хочу убедиться.

-5

Решение

нет.

В C ++ это:

x == a || b  // Same as (x == a) || b

Это эквивалентно этому:

(x == a) || (bool)b

Который оценивает true если x а также a равны ИЛИ, если b оценивает true при конвертации в bool, В C, с другой стороны, это эквивалентно этому:

(x == a) || (b != 0)

Которые оценивают true если x а также a равны ИЛИ, если b отличается от 0 (здесь мы должны сделать неявное предположение, что b имеет целочисленный тип, иначе это не скомпилируется).

С другой стороны, это:

(x == a || x == b) // Same as ((x == a) || (x == b))

Оценивает до true когда либо x а также a равны ИЛИ x а также b равны (т.е. если x либо равно a или равно b) как в C ++, так и в C.

3

Другие решения

Два выражения не эквивалентны. это

if(x == a || b)

является эквивалентом

if( (x == a) || (b))

то есть ИЛИ x==a а также b, В C ++, если b оценивает что-либо кроме 0 или же false, принимается как true,

Второй проверяет, x==b вместо простого тестирования b,

2

Нет. В C это эквивалентно:

if(x == a || b != 0)
1

Первый читается как «если х равен а, или если б правдив»

Вторая читается как «если х равен а, или если х равен б»

0

Нет.

if (x == a || b)

равно

if ((x == a) || (bool)b)

потому что оператор == имеет выше старшинство чем оператор ||, Увидеть Таблица приоритетов операторов.

0

Вы почти правы, значит первый случай х равно ИЛИ b верно.

Ленивая оценка означает, что выражение будет оцениваться только до тех пор, пока результат не станет очевидным. Например, в выражении ИЛИ (x || y)результат будет известен когда x==true — тогда все выражение тоже должно быть правдой. В случае AND, как (x && y), результат будет очевиден, когда x==false, Значит ты прав, если x==aМы уже знаем ответ, и больше не нужно работать.

0
По вопросам рекламы [email protected]