首先看一个例子:

int fun1()
{
 cout<<"num1"<<endl;
 return 1;
}

int fun2()
{
 cout<<"num2"<<endl;
 return 2;
}

int main()
{
 cout<<fun1()<<"  "<<fun2()<<endl;
 return 0;
}

输出结果是

num2

num1

1  2

为什么呢?为什么不是num11num22呢?这里涉及到cout输出流的执行顺序问题。

cout的输出顺序有如下规律:

计算顺序:自右至左

输出顺序:自左至右

cout作为输出流,有一个缓冲区,先从右往左将输出读入缓冲区,在从缓冲区中读出(类似堆栈)

假设a = 1; b = 2; c = 3;
cout<<a<<b<<c<<endl;
缓冲区:|3|2|1|<-   (把“<-”看作是指针)
输出:|3|2|<-     (输出 1)
      |3|<-       (输出 2)
      |<- (输出 3)
结果就是123.

在一开始的例子中,从右往左读入,先执行fun2(),输出num2,并将返回值2保存进缓冲区,再执行fun1(),输出num1,并将返回值1保存进缓冲区。最后开始读取缓冲区中的内容,输出1 2。

C++输出流cout的执行顺序问题_知之可否的博客-CSDN博客_cout执行顺序

C++输出流cout的执行顺序问题相关推荐

  1. 学习MFC首先要知道的--程序执行顺序

    MFC的程序执行顺序 很多刚学MFC的人都会被MFC给弄的晕头转向.以前传统的C语言中的main()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如 ...

  2. C++析构函数执行顺序

    今天发现主程序中有多个对象时析构函数的执行顺序不是对象定义的顺序,而是对象定义顺序反过来. 思考了一下,结合之前继承.成员对象等的析构函数执行的顺序,我觉得析构函数执行的顺序为:构造函数的顺序反过来, ...

  3. 递归过程中语句执行顺序

    递归的两种模式 模式一 //递归的过程中在"递"的过程中解决问题 function function_name(Max_argument){if(end_condition){en ...

  4. for循环中的三语句执行顺序

    for循环的执行语法是: for(<:初始化>;<条件表达式>;<增量>) 语句: 初始化总是一个赋值语句,它用来给循环控制变量赋初值:条件表达式是一个关系表达式, ...

  5. 派生类的构造函数执行顺序

    1.当基类有默认构造函数时 派生类构造函数可以不向基类构造函数传递参数. 构造派生类的对象时,基类的默认构造函数将被调用. 2.如需执行基类中带参数的构造函数 派生类构造函数应为基类构造函数提供参数. ...

  6. C++中赋值语句的执行顺序

    (1)C++的赋值语句具有其他高级语言的赋值语句的功能。但不同的是: C++中的赋值号"="是一个运算符,可以写成     a=b=c=d; 而在其他大多数语言中赋值号不是运算符, ...

  7. 多重继承的构造函数和析构函数的执行顺序(包含虚基类)

    下面示例就是说明多重继承析构函数和构造函数的执行顺序: #include <iostream> using namespace std;class A {public:A(int i){c ...

  8. atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  9. C++ for循环执行顺序

    for(表达式1:表达式2:表达式3) { 语句块: } 一直以为for循环在执行表达式1后,直接执行循环内部语句块,直到今天调试程序出现问题,才对这个执行顺序提出疑问.So,写了以下测试程序: #i ...

  10. for循环的3个表达式执行顺序

    一.形式: for(表达式1; 表达式2; 表达式3){ 循环语句块 } for(int i=1; i<10; i++){ print("hello world") } 二. ...

最新文章

  1. IDC:预计全球人工智能支出将在四年内翻一番
  2. python爬虫项目实例-Python爬虫实例项目
  3. hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
  4. 并发编程-04线程安全性之原子性Atomic包的4种类型详解
  5. 如何看懂dtd文档?
  6. MySQL大表关联如何优化_MySQL 对于大表(千万级),要怎么优化呢?
  7. 第一章:操作系统引论
  8. 【软件工程】实验七:建立功能模型--自行车租赁管理系统
  9. 如何查看路由器的MAC地址
  10. 室温金刚石共聚焦平台
  11. 匠心独运: python打造GUI图形小窗口
  12. 告诉你一个真实的傅里叶
  13. WebDriverPool浏览器驱动池 减少驱动频繁打开和关闭引起的资源损耗
  14. Install Debian (Etch/testing) in a USB stick 在U 盘中安装 Debian(Etch/testing)(
  15. 树莓派程序开机自启(尝试过很多终于成了)
  16. c语言求三个整数的积,反汇编学习-C语言实例解析精粹-实例3求整数之积
  17. 华为破除魔咒:任正非的自我革命
  18. 我的世界游侠联机教程
  19. DAC8531驱动代码(FPGA)
  20. 从清华园镜像站下载方法

热门文章

  1. OSChina 新年乱弹 ——爱你们,新年快乐
  2. mysql chunk 函数_Laravel中的chunk组块结果集处理与注意问题
  3. matlab动态图阿基米德螺旋,魔兽世界M基尔加丹阿基米德螺旋线之Matlab动图!国服加油...
  4. bootstrap之栅格化
  5. 身边已经消失或走在消失路上的可爱小动物
  6. Stop Staring: Facial Modeling and Animation Done Right
  7. lmp91000偏压配置求助
  8. 小码哥php教程,小码哥Java从0到高级工程师
  9. C# 网易云音乐API 多达100+ 支持登录,无损下载
  10. 1078: 字符串加密