Приоритет оператора в этом вопросе не имеет значения. Это порядок оценки, который вызывает такое поведение.
В C # i++
оценивается до i % 2
, поскольку он находится на левой стороне. Таким образом, i % 2
ложно, и вычисляется правая часть if.
Сначала вы используете приоритет для получения синтаксического дерева:
=
buffer[i++]
if i % 2
then temp[end--]
else temp[begin++]
На каждом узле вы оцениваете детей слева направо. Это означает, что i++
оценивается до i % 2
.
Эрик Липперт имеет множество сообщений на эту тему, как здесь, на SO, так и в своем блоге:
Лично я бы избежал такого кода. Гораздо приятнее разбить его на несколько выражений или даже использовать простой оператор if
вместо ? :
В C ++ доступ к переменной, в которую была записана запись без точки последовательности, является неопределенным поведением. Я думаю, =
не является точкой последовательности, поэтому я думаю, что ваше выражение не определено в C ++ и просто сработало.