Поведение не определено, потому что между операторами приращения нет точек последовательности.
Объяснять, почему код делает то, что он делает, - бессмысленное занятие. Вы не должны писать код с неопределенным поведением, даже если он вам подходит.
Для решения вопроса, поднятого в комментариях: это правда, что оператор запятой действует как точка последовательности, однако запятая здесь не является оператором запятой. Из Википедии:
Использование токена запятой в качестве оператора отличается от его использования в вызовах и определениях функций, объявлениях переменных, объявлениях перечислений и подобных конструкциях, где он действует как разделитель.