Срок действия выражения
Да, это допустимое выражение, при условии, что y является или может быть неявно преобразовано в целое число.Если это не так и оператор >
перегружен, это другая история, выходящая за рамки этого вопроса.
Он будет оцениваться слева направо как ((4 > y) > 1)
.
Предполагая y
является целым числом, давайте рассмотрим две возможности.4 > y
может вернуть true
или false
.Следующая часть фактически становится true > 1
или false > 1
.
Учитывая неявное преобразование bool в int , существует две возможности: A) 4 > y
возвращает true
.true
оценивается как 1
.1 > 1
оценивается как ложное.Б) 4 > y
возвращает false
.false
оценивается как 0
.0 > 1
оценивается как ложное.
Независимо от того, что выражение будет оценивать как ложное.
Переписанная интерпретация
Я предполагаю, что вы намереваетесь((4 > y) && (y > 1))
.
Пример
(4 > y > 1)
- не то же самое, что (4 > y && y > 1)
.
Логические операторы
Логические операторы (!
, &&
, ||
) используют логику короткого замыкания.
При заданном a && b
, a
будет оцениваться.Если a
имеет значение true, тогда b
будет оценено. Иначе, b
не будет оцениваться .Что касается a || b
, логика короткого замыкания работает в обратном порядке.a
будет оцениваться.Поскольку выражение a
вычисляется первым, если оно ложно, то вероятность того, что все выражение будет иметь значение true, отсутствует.
Учитывая a || b
, a
будет оцениваться.Если a
оценивается как ложное, то b
будет оцениваться. Иначе, b
не будет оцениваться .Поскольку выражение a
вычисляется первым, если оно истинно, то вероятность того, что все выражение будет иметь значение false, отсутствует.
Цепочка операторов зависит от приоритета оператора .Лучше использовать круглые скобки и быть ясным, чем рисковать неправильным поведением.