Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有人声称这条线不在 C++ 标准中:
int i(1); array_of_int[i] = i++;
该人说它会分配1,但我们不知道它是否会在,array_of_int[1]或者array_of_int[2]尽管 Visual Studio 和大多数编译器会在array_of_int[1].
1
array_of_int[1]
array_of_int[2]
他是对的吗?
这是未定义的行为。从字面上看,任何行为都是合法的。
禁止该行代码的段落是这样的:
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值
a[i]和之间没有序列点i++,读取到iina[i]的目的不是为了确定iby存储的值是什么i++。
a[i]
i++
i