我已经看过其他类似的问题并阅读了有关它的缺陷。但我还是不明白。为什么i = ++i + 1
在 C++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
。这些似乎彼此之间没有顺序(根据我的逻辑)。标准说:
如果标量对象的副作用相对于同一标量对象的另一个副作用或使用同一标量对象的值的值计算是未排序的,则行为未定义。
缺陷报告中的解释没有帮助我理解。左值到右值的转换与什么有什么关系?我做错了什么?