Как C ++ обрабатывает &&? (Оценка короткого замыкания)
Когда встречается (bool1 && bool2), делает ли c ++ когда-либо попытку проверить bool2, если bool1 был найден ложным или игнорирует его так, как это делает PHP?
Извините, если это слишком простой вопрос, но я действительно не мог найти упоминания об этом ни в Schildt, ни в Интернете.
- Как я получу последний день месяца?
- Заголовок C99 stdint.h и MS Visual Studio
- Почему malloc + memset работает медленнее, чем calloc?
- Вычисление размера массива
- c - преобразовать строку в смешанном случае ко всему нижнему регистру
- Легкий способ преобразования struct tm (выраженный в UTC) в тип time_t
- Сохранить и загрузить MemoryStream в / из файла
- Показать дочернюю форму в центре родительской формы в C #
- Как предотвратить закрытие приложения при закрытии формы запуска?
- как программно перемещать мышь, щелкнуть, правым кликом и нажатием клавиши и т. д. в winform и wpf?
- Как предотвратить появление пустых атрибутов xmlns в XmlDocument .NET?
- Что такое «форвардная декларация» и разница между «typedef struct X» и «struct X»?
- Как написать плагин для браузера?
Да, оператор &&
в C ++ использует оценку короткого замыкания, так что если bool1
оценивает значение false
это не bool2
оценке bool2
.
«Оценка короткого замыкания» – это причудливый термин, который вы хотите найти в Google и искать в индексах.
C ++ использует логику короткого замыкания, поэтому, если bool1
является ложным, ему не нужно проверять bool2
.
Это полезно, если bool2 фактически является функцией, которая возвращает bool или использует указатель:
if ( pointer && pointer->someMethod() )
без логики короткого замыкания, он сработает при разыменовании указателя NULL, но с логикой короткого замыкания он работает нормально.
Это правильно (короткое поведение cicuit). Но будьте осторожны: короткое замыкание останавливается, если вызываемый оператор не является встроенным оператором, а определяемым пользователем operator&&
(тем же самым с operator||
).
Ссылка в этом SO
Короткие замыкания оператора &&
в C ++ – если bool1
был ложным в вашем примере, bool2
не будет проверен / выполнен.
Это называется оценкой короткого замыкания (Wikipedia)
Оператор && является оператором короткого замыкания в C ++, и он не будет оценивать bool2, если bool1 является ложным.
Оценка короткого замыкания обозначает семантику некоторых булевых операторов в некоторых языках программирования, в которых второй аргумент выполняется или оценивается только в том случае, если первый аргумент недостаточен для определения значения выражения: например, когда первый аргумент И функция оценивает значение false, общее значение должно быть ложным; и когда первый аргумент функции OR имеет значение true, общее значение должно быть истинным.
В C ++ оба && и || операторы используют оценку короткого замыкания.
То, что вы имеете в виду, это оценка короткого замыкания . Я думал, что это может быть специфический компилятор, однако эта статья, с которой я связан, показывает ее как специфичную для языка, а C ++ – придерживаться. Если это действительно специфический компилятор, я не могу представить компилятор, который бы не следил за ним. Компилятор изо дня в день, который я использую в настоящий момент, VS 2008 года. В основном это будет следовать за приоритетом оператора, и как только результат условия будет гарантирован,