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