Какое логическое выражение вычисляется первым в операторе IF, содержащем операцию OR? - PullRequest
0 голосов
/ 21 декабря 2010

В следующем выражении, в VC ++, какое булево выражение вычисляется первым?Кроме того, они оба оценены?

if( (X==Y) || (Z==T))
{
 //code here
}

Ответы [ 4 ]

12 голосов
/ 21 декабря 2010

Они оцениваются слева направо, и если первое из них истинно, выражение замыкается, а второе не оценивается.

9 голосов
/ 21 декабря 2010

Если используется встроенный оператор ||, то X == Y будет оцениваться до оценки Z == T.Встроенный оператор || оценивается слева направо и он закорачивается, поэтому, если X == Y истинно, то по определению X == Y || Z == T верно, поэтому Z == T не оценивается.

Тем не менее, оператор || также может быть перегружен, и если он перегружен, он не замыкается накоротко.Если для использования || здесь выбрана определяемая пользователем перегрузка ||, то оцениваются как X == Y, так и Z == T, даже если X == Y имеет значение true.Редко перегружается оператор ||, так как это может привести к неинтуитивному коду.Просто важно помнить, что он не ведет себя так же, как встроенный оператор.

4 голосов
/ 21 декабря 2010

Первое выражение слева направо всегда будет оцениваться (в данном случае (X==Y)), второе выражение (снова слева направо и в этом случае (Z==T)) будет оцениваться только в том случае, если первое ложно.Это известно как Оценка короткого замыкания .

1 голос
/ 21 декабря 2010

X == Y будет оцениваться первым.Если true и условие является ИЛИ, ничего в строке не будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...