为什么这两种输出样式给出不同的答案

  • 本文关键字:答案 样式 两种 输出 c++
  • 更新时间 :
  • 英文 :


那么在 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<<E2E1>>E2中,E1 的每个值计算和副作用都在 E2 的每个值计算和副作用之前排序(自 C++17 以来(

如果您在 C++17 之前使用C++标准,则行为是未定义的,因此编译器可以执行您不想要的任何工作。

如果要详细了解计算表达式可以在哪个上下文中导致未定义的行为,请参阅以下内容:

https://en.cppreference.com/w/cpp/language/eval_order

最新更新