Оценка внутреннего короткого замыкания в с
Я знаю, что Java и C/C++ имеют оценку короткого замыкания, то есть в if (a && b)
, b
никогда не будет оцениваться, если a
неправда.
Но что, если у меня есть выражение как if ( (a && b) OP c )
(где OP
является произвольным логическим оператором), будет b
оценивается, если a = false
? Благодарю.
3 ответа
Стандарты C говорят, что -
6.5.13 Логический оператор И
- Оператор && гарантирует оценку слева направо...... . Если первый операнд сравнивается равным 0, второй операнд не оценивается.
Так на всякий случай a==flase
b
не будет оцениваться.
Если a=false
тогда условие для b
не будет проверяться так (a && b)
ВСЕГДА ложно, и следующее условие зависит от используемого ОП, если оно &&
это не будет оценено. Если это ||
это будет оценено.
Так
((a && b) OP c)
здесь, если a=false
(a && b)
всегда будет ложным
Вы всегда будете иметь, если a = false
: a && b == 0
независимо от стоимости b
, Почему операция, выполненная после оценки, изменит это?
a b | a && b
0 0 | 0
0 1 | 0