计算 I+V[i++] 的顺序是什么?

what is the order of calculating i+v[i++]

本文关键字:顺序 是什么 I+V i++ 计算      更新时间:2023-10-16
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{1,2,3,4,5};
int i = 0;
while (i < 5) {
cout << i+v[i++] << endl;
}
return 0;
}

为什么程序的输出是"2,4,6,8,10",而不是"1,3,5,7,9"?

这是未定义的行为,因为"第一个"i和其他i++的读取是未排序的。输出毫无意义。

延伸阅读:未定义的行为和序列点,

一些编译器会警告您,您正在执行导致未定义行为的操作:依赖于未排序表达式的求值顺序。

例:

<source>:22:22: warning: unsequenced modification and access to 'i' [-Wunsequenced]
cout << i+v[i++] << endl;

未定义序列点之间表达式的求值顺序。表达式i+v[i++]中唯一的序列点位于表达式的末尾,因此编译器可以根据需要自由排序i的添加和i的增量。