Подтвердить что ты не робот

Как С++ обрабатывает &&? (Оценка короткого замыкания)

Когда встречается с (bool1 & bool2), С++ пытается проверить bool2, если bool1 был найден ложным или игнорирует его так, как это делает PHP?

Извините, если это слишком простой вопрос, но я действительно не мог найти упоминания об этом ни в Schildt, ни в Интернете.

4b9b3361

Ответ 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 года. В основном это будет следовать приоритету оператора, и как только результат условия будет гарантирован,