Неопределенное поведение == нельзя гарантировать, что результат всегда будет одинаковым, когда вы запускаете его в точно одинаковых условиях, или нельзя гарантировать, что результат всегда будет одинаковым, когда вы используете разные компиляторы или среды выполнения для его выполнения.
В вашем коде, поскольку он использует оператор сравнения равных, который не определяет , какая сторона операндов должна быть выполнена первой, --i
или i++
может закончиться выполнением первой, а ваш Ответ будет зависеть от фактической реализации компилятора. Если --i
выполняется первым, это будет 4 == 4
, i = 5; если i++
будет реализован первым, это будет 5 == 5
, i = 5.
Тот факт, что ответ может оказаться таким же, не мешает компилятору предупредить вас, что это неопределенная операция.
Теперь, если это язык, который определяет, что левая сторона (или правая сторона) всегда должна выполняться в первую очередь, то поведение больше не будет неопределенным.