那么在 c++ 中为什么这两个输出不同?
int x;
for(int x=2;x<5;x++);
cout<<x<< x++ << ++x << x <<endl;
输出输出 7677
cout<<x<<endl;
cout<<x++<<endl;
cout<<++x<<endl;
cout<<x<<endl;
输出输出 5577
那么它们为什么不同呢?
我猜到的是第一个同时计算整行,这就是为什么它输出 7 但为什么++x
仍然输出 6? 这里有某种优先级还是发生了什么?
它在 C++17 中应该没有什么不同,但在它之前就不一样了。
在移位算子表达式
E1<<E2
和E1>>E2
中,E1 的每个值计算和副作用都在 E2 的每个值计算和副作用之前排序(自 C++17 以来(
如果您在 C++17 之前使用C++标准,则行为是未定义的,因此编译器可以执行您不想要的任何工作。
如果要详细了解计算表达式可以在哪个上下文中导致未定义的行为,请参阅以下内容:
https://en.cppreference.com/w/cpp/language/eval_order