Как С++ обрабатывает &&? (Оценка короткого замыкания)
Когда встречается с (bool1 & bool2), С++ пытается проверить bool2, если bool1 был найден ложным или игнорирует его так, как это делает PHP?
Извините, если это слишком простой вопрос, но я действительно не мог найти упоминания об этом ни в Schildt, ни в Интернете.
Ответы
Ответ 1
Да, оператор &&
в С++ использует оценку короткого замыкания, так что если bool1
оценивается как false
, он не оценивает оценку bool2
.
"Оценка короткого замыкания" - это причудливый термин, который вы хотите найти в Google и искать в индексах.
Ответ 2
С++ использует логику короткого замыкания, поэтому, если bool1
является ложным, нет необходимости проверять bool2
.
Это полезно, если bool2 на самом деле является функцией, которая возвращает bool или использует указатель:
if ( pointer && pointer->someMethod() )
без логики короткого замыкания, он сработает при разыменовании указателя NULL, но с логикой короткого замыкания он отлично работает.
Ответ 3
Это правильно (короткое поведение cicuit). Но будьте осторожны: короткое замыкание останавливается, если вызываемый оператор не является встроенным оператором, а определяемым пользователем operator&&
(то же самое с operator||
).
Ссылка в этом SO
Ответ 4
Короткие замыкания оператора &&
в С++ - если bool1
в вашем примере было ложным, bool2
не будет проверен/выполнен.
Ответ 5
Это называется оценкой короткого замыкания (Wikipedia)
& & оператор является оператором короткого замыкания в С++, и он не будет оценивать bool2, если bool1 является ложным.
Ответ 6
Оценка короткого замыкания обозначает семантику некоторых булевых операторов в некоторых языках программирования, в которых второй аргумент выполняется или оценивается только в том случае, если первый аргумент недостаточен для определения значения выражения: например, когда первый аргумент функции AND оценивается как false, общее значение должно быть ложным; и когда первый аргумент функции OR имеет значение true, общее значение должно быть истинным.
В С++ оба && и || операторы используют оценку короткого замыкания.
Ответ 7
То, о чем вы говорите, это оценка короткого замыкания. Я думал, что это может быть специфический компилятор, однако эта статья, с которой я связан, показывает ее как специфичную для языка, а С++ - придерживаться. Если это действительно специфический компилятор, я не могу представить компилятор, который бы не следил за ним. Компилятор изо дня в день, который я использую в настоящий момент, VS 2008 года. В основном это будет следовать приоритету оператора, и как только результат условия будет гарантирован,