我有一个人声称这条线不在C ++标准中:
int i(1);
array_of_int[i] = i++;
此人表示会指定1
,但我们无法知道它是否会在array_of_int[1]
或array_of_int[2]
,尽管visual studio和大多数编译器都在array_of_int[1]
他是对的吗?
答案 0 :(得分:6)
这是未定义的行为。从字面上看,任何行为都是合法的。
禁止该行代码的段落是:
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算修改一次。此外,先前的值应该只读以确定要存储的值
a[i]
和i++
之间没有序列点,i
中的a[i]
读取不是为了确定{{1}中存储的值} i
。