Я видел другие похожие вопросы и читал defect об этом. Но я все еще не понимаю. Почему i = ++i + 1
четко определен в С++ 11, когда i = i++ + 1
нет? Как стандарт четко определяет это?
По моей работе у меня есть следующий секвенсор перед графиком (где стрелка представляет собой упорядоченную до отношения, и все это вычисление значения, если не указано иное):
i = ++i + 1
^
|
assignment (side effect on i)
^ ^
| |
☆i ++i + 1
|| ^
i+=1 |
^ 1
|
★assignment (side effect on i)
^ ^
| |
i 1
Я отметил побочный эффект i
с черной звездой и вычислением значения i
с белой звездой. Они кажутся непоследовательными по отношению друг к другу (согласно моей логике). И в стандарте говорится:
Если побочный эффект скалярного объекта не зависит от другого побочного эффекта для одного и того же скалярного объекта или вычисления значения с использованием значения одного и того же скалярного объекта, поведение undefined.
Объяснение в отчете не помогло мне понять. С чем связано преобразование lvalue-to-rvalue? Что я получил неправильно?