关于std::cout 输出

jeff_
  • 39

代码:

#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

评论
阅读 2.6k
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,确实这个是未定义行为。

撰写回答

登录后参与交流、获取后续更新提醒

宣传栏