Не определено.
Ответ здесь за C, Очки последовательности и частичный порядок
Я думаю, что то же самое относится к C ++ (и вот мой ответ, прежде чем я увидел эту ссылку):
Оператор запятой вводит точку последовательности (и в некоторой степени ограничивает порядок, в котором должно быть вычислено выражение - слева направо), поэтому:
- две модификации
i
разделены точкой последовательности (вторая запятая).
- модификация
i
в i++
отделена от всего остального точками последовательности.
- модификация
i
на =
не отделена от последнего вхождения i
в выражении, но это нормально, потому что нам разрешен доступ к i
и его изменение без промежуточной точки последовательности, при условии, что доступ «определяет значение, которое будет сохранено» (5/4).
- Как говорит Алс, на практике не имеет значения, определил ли этот код поведение или нет при условии, что у всех есть здравый смысл не писать его; -)