Это
if(x == a || b){//do something}
такой же как
if(x == a || x == b){//do something}
?
Я думаю, что это не так, потому что в первом случае мы оцениваем, если x равен a, и если b равно true или false, а во втором случае мы оцениваем, если x равен a и если x равен b. И я понимаю, что в ленивой оценке, если х равен а, мы не оцениваем дальше.
Но кто-то думает, что в первом случае мы спрашиваем, равен ли х а или б, поэтому я хочу убедиться.
нет.
В 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.
Два выражения не эквивалентны. это
if(x == a || b)
является эквивалентом
if( (x == a) || (b))
то есть ИЛИ x==a
а также b
, В C ++, если b
оценивает что-либо кроме 0
или же false
, принимается как true
,
Второй проверяет, x==b
вместо простого тестирования b
,
Нет. В C это эквивалентно:
if(x == a || b != 0)
Первый читается как «если х равен а, или если б правдив»
Вторая читается как «если х равен а, или если х равен б»
Нет.
if (x == a || b)
равно
if ((x == a) || (bool)b)
потому что оператор ==
имеет выше старшинство чем оператор ||
, Увидеть Таблица приоритетов операторов.
Вы почти правы, значит первый случай х равно ИЛИ b верно.
Ленивая оценка означает, что выражение будет оцениваться только до тех пор, пока результат не станет очевидным. Например, в выражении ИЛИ (x || y)
результат будет известен когда x==true
— тогда все выражение тоже должно быть правдой. В случае AND, как (x && y)
, результат будет очевиден, когда x==false
, Значит ты прав, если x==a
Мы уже знаем ответ, и больше не нужно работать.