Because it's undefined behavior, which means the runtime system is allowed to
do weird or even bizarre things.
The C++ language says you cannot modify a variable more than once between
sequence points. Quoth the
standard (section 5, paragraph 4):
Between the previous and next sequence point a scalar object shall have its
stored value modified at most once by the evaluation of an
expression. Furthermore, the prior value shall be accessed only to determine
the value to be stored.