6

我有人声称这条线不在 C++ 标准中:

int i(1);
array_of_int[i] = i++;

该人说它会分配1,但我们不知道它是否会在,array_of_int[1]或者array_of_int[2]尽管 Visual Studio 和大多数编译器会在array_of_int[1].

他是对的吗?

4

1 回答 1

6

这是未定义的行为。从字面上看,任何行为都是合法的。

禁止该行代码的段落是这样的:

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值

a[i]和之间没有序列点i++,读取到iina[i]的目的不是为了确定iby存储的值是什么i++

于 2012-08-30T19:04:14.727 回答