关于std::cout 输出

代码:

#include <iostream>
using namespace std;
int main()
{
    int a = 1;
    cout << a << " " << a++ << " " << ++a << endl;       
}    

查了相关资料我知道了,输出流的规律

  • 计算顺序:自右至左
  • 输出顺序:自左至右

理想运行结果:3 2 2
实际运行结果:3 2 3
clipboard.png

clipboard.png

问题:
请教下为什么 ++a这里会输出3

阅读 5k
2 个回答

一条表达式语句中对同一个变量使用多次副作用语法(题目中的前缀自增和后缀自增)是未定义行为,输出什么都不算错。

请不要写这种代码。

关于表达式的求值顺序请参考:求值顺序

root@lui-pc:~/CLionProjects/test01# g++ -std=c++11 main.cpp
root@lui-pc:~/CLionProjects/test01# ./a.out 
1 1 3
root@lui-pc:~/CLionProjects/test01# cat main.cpp
#include <iostream>
using namespace std;
int main()
{
    int a = 1;
    cout << a << " " << a++ << " " << ++a << endl;
} root@lui-pc:~/CLionProjects/test01# 
root@lui-pc:~/CLionProjects/test01# 

上面那个仁兄说的很好,我在ubuntu18.04下测的结果是1 1 3,确实这个是未定义行为。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题