我对我发现的解释非常确信 i = ++i 不是不确定的 就C ++ 0x而言,我无法判断 i += ++i 是否定义明确。有人吗?

有帮助吗?

解决方案

推理的原因 i = ++i 定义明确的同样可以用来证明 i += ++i 也必须定义明确。

i += ++i 等同于 i += (i += 1) 并且新的测序规则要求分配发生在 i += 1 子表达。
这意味着表达的结果 i += ++i 必须与 i = 2 * i + 1.

编辑: 我必须修改答案,因为毕竟这种行为是不确定的。
行为 i += ++i 是不确定的,因为子表达的价值计算 i (左侧参数)和 ++i 在彼此相关的情况下没有序列,其中一个包含对象的更新 i.

这不是表达的问题 i = ++i, ,因为那里 i 在左侧,不会经历LVALUE到RVALUE转换,这确实发生在 i += ++i 案子。


在旁注上:不要在任何严肃的项目中编写这样的代码。它过多地依赖于确切地了解测序规则,并且会有很多人不正确理解测序规则,而是没有意识到DR 637的结果的变化,或者因错过一些重要的重要性而被绊倒所讨论的表达的各个方面(就像我撰写此答案的第一个修订时发生的那样)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top