C中的x = i ++是否有定义的行为?为什么?

时间:2011-10-21 03:26:02

标签: c undefined

根据FAQi = i++是C中未定义的行为,因为此语句只有一个序列点(完整表达式),并且在此语句中i已更改两次(侧i++=的效果,所以它是一种未定义的行为。

问题1是我能正确理解吗?或者我误解为什么i = i++未定义?

第二个问题是x = i++是一个有效的表达式吗?

我猜它是有效的,x的值始终是i的原始值。因为虽然此语句中只有一个序列点,但x和i都只修改了一次,i++具有更高的优先级,这意味着它应该是有效的,x++将始终在赋值,使x等于x的原始值。这是对的吗?

1 个答案:

答案 0 :(得分:4)

  1. 是的,至少从C ++ 03开始。我相信C ++ 11在某种程度上有所改变,但我无法获得该标准的副本以进行检查。
  2. 因为您修改x一次,i修改一次。没有插入序列点的单个变量没有多次写入。