Заимствовано из cppreference.com :
Одним из важных аспектов C ++, связанных с приоритетом операторов, является порядок вычисления и порядок побочных эффектов в выражениях. В некоторых случаях порядок, в котором происходят вещи, не определен. Например, рассмотрим следующий код:
float x = 1;
x = x / ++x;
Не гарантируется, что значение x будет одинаковым для разных компиляторов, поскольку неясно, должен ли компьютер сначала оценивать левую или правую часть деления. В зависимости от того, какая сторона оценивается первой, x может принимать другое значение.
Кроме того, хотя ++ x оценивается как x + 1, побочный эффект фактического сохранения этого нового значения в x может произойти в разное время, что приведет к различным значениям для x.
Суть в том, что выражения, подобные приведенному выше, ужасно неоднозначны и их следует избегать любой ценой. В случае сомнений разбейте одно неоднозначное выражение на несколько выражений, чтобы убедиться в правильности порядка вычисления.