Оценка внутреннего короткого замыкания в с

Я знаю, что Java и C/C++ имеют оценку короткого замыкания, то есть в if (a && b), b никогда не будет оцениваться, если a неправда.

Но что, если у меня есть выражение как if ( (a && b) OP c ) (где OP является произвольным логическим оператором), будет b оценивается, если a = false? Благодарю.

3 ответа

Стандарты C говорят, что -

6.5.13 Логический оператор И

  1. Оператор && гарантирует оценку слева направо...... . Если первый операнд сравнивается равным 0, второй операнд не оценивается.

Так на всякий случай a==flaseb не будет оцениваться.

Если 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
Другие вопросы по тегам