Это x=a++ + (a-b);
- неопределенное поведение, независимо от того, ++a
или a++
.
Причина в том, что вы звоните operator+
с двумя аргументами: a++
и (a-b)
, но не определено, какой из двух аргументов будет оцениваться первым.
РЕДАКТИРОВАТЬ: - как я вижу, вы не понимаете проблему здесь, я добавлю еще немного информации:
operator++
(постфикс или префикс, что угодно), изменяет значение переменной, так что это делает этот оператор более особенным, чем operator+
, operator-
и т. Д. 1021 * и a++
изменяют значение a
, после этого вам нужно иметь точку последовательности, прежде чем снова использовать a
. operator+
НЕ является точкой последовательности, так что вы как бы назвали operator+( ++a, (a-b) );
. Стандарт НИЧЕГО не говорит о порядке оценки параметров, поэтому мы получаем неопределенное поведение .
Better