Я не знаю, откуда вы взяли, что «нужно какое-то« возвращаемое »значение x--, которого там нет».Во-первых, не совсем понятно, что вы имеете в виду.Во-вторых, независимо от того, что вы имеете в виду, похоже, это не имеет никакого отношения к источнику неопределенного поведения в x = x--
.
x = x--
приводит к неопределенному поведению, поскольку пытается дважды изменить x
безпромежуточная точка последовательности.Здесь нет необходимости в «возвращаемом значении».
Основная проблема с x = x--
заключается в том, что у него есть два побочных эффекта, которые возникают в неопределенные моменты в неопределенном порядке.Один побочный эффект вводится оператором присваивания.Еще один побочный эффект внес оператор postfix --
.Оба побочных эффекта пытаются изменить одну и ту же переменную x
и в целом противоречат друг другу.Вот почему поведение в таких случаях объявляется неопределенным де-юре.
Например, если исходное значение x
было 5
, то вашему выражению требуется, чтобы x
стало как 4
(побочный эффект уменьшения), так и 5
(побочный эффект)присваивания) одновременно.Излишне говорить, что для x
невозможно стать 4
и 5
одновременно.
Хотя такое прямое противоречие (например, 4
против 5
) не требуется для возникновения UB.Каждый раз, когда у вас есть два побочных эффекта, попадающих в одну и ту же переменную без промежуточной точки последовательности, поведение не определено, даже если значения, которые эти побочные эффекты пытаются вставить в переменную, совпадают.