The order of evaluation of expressions is determined by a particular implementation, except when the language guarantees a certain order of calculations. If, in addition to the result, evaluating the expression causes changes in the runtime, then the expression is said to have side effects.
MSDN
In our internal newsletter about C #, a regular question arises, which concerns the correct interpretation of such constructions:

a -= a *= a;
p[x++] = ++x;
In response, I ask:
Yes, who writes such a code with an imperturbable look? It's one thing when you write this, trying to win at the International COC Contest, or if you want to write a puzzle - but in both cases you realize that you are doing something non-standard. That, there really is someone who writes a - = a * = a and p [x ++] = ++ x; and thinks to himself "Shit, yes I write really cool code! "
KlauS 26 september 2017, 9:31