Условный оператор
Если значение RateValue равно 101, то:
— значением выражения (RateValue > 0) станет true,
— а значением выражения (RateValue <= 100) — false. В итоге результат выражения true && false будет равен false.
Порядок вычисления выражения
— А как будет вычисляться следующее выражение (никогда на используйте таких конструкций, хотя они и допустимы в Си++)?
х*3 < у+50 > z/3
— Так может написать начинающий программист, чтобы проверить, больше ли у+50, чем х*3, и больше ли у+50, чем z/3. Однако приведенная здесь запись неверна. Прежде всего, здесь не задан явно. (с помощью круглых скобок) порядок вычисления, что само по себе является очень плохим стилем программирования. А в C++ принято, что в подобных ситуациях вычисление значения выражения всегда происходит слева направо. ^
Вычисление значения выражения Си++, где порядок выполнения операций с одинаковым приоритетом не указан явно, почти всегда выполняется слева направо. Особые случаи обратного порядка вычислений (справа налево) будут оговариваться в книге особо.
То есть, если переменная х хранит значение 10, переменная у — 0, а переменная z — 120, то сначала в соответствии с более высокими приоритетами будут рассчитаны значения арифметических выражений:
10*3 < 0+50 > 120/3 или
30 < 50 > 40
а далее возьмется самое первое слева сравнение (30 < 50) и вычислится его значение, которое очевидно равно true. В итоге получится ужасное и неестественное заключительное сравнение
true > 40
Однако оно не считается в Си++ ошибкой — как уже говорилось, константа true имеет значение 1, то есть выражение
true > 40 эквивалентно выражению
1 > 40 значение которого равно false (или 0).
113