【发布时间】:2015-08-26 14:47:20
【问题描述】:
在 C 中,是
a[i] = a[++i];
相当于
a[i] = a[i+1]; i++;
也就是说,首先评估赋值的哪一侧,左侧使用i的哪个值?还是这个分配模棱两可?
【问题讨论】:
-
未定义的行为。不要写这样的代码。
-
@Amadan,实际上并非如此。来自stackoverflow.com/a/3914332/434551,“C++03 [第 5/4 节] 说在前一个和下一个序列点之间,一个标量对象的存储值最多只能通过表达式的评估修改一次。”这里,
i是只修改一次。 -
@RSahu:参见this answer,来自 K&R 的引用,带有这个确切的例子。它不违反一个约束这一事实并不意味着它不能违反另一个。
-
是this question的复制品,the second answer解释清楚了。
-
@RSahu ideone.com/bzC8EQ
标签: c arrays pre-increment operator-precedence