C++中的cout是最常见的,假如cout后面有多个输出的话,他们的输出顺序是什么呢 决定他们输出顺序背后的原理是什么呢 先看下面的代码(1):
1 #include
2 using namespace std;
3 int abs(int a);
4 int main()
5 { int a=-5;
6 cout<
7 }
8 int abs(int a)
9 { cout<<"int a"<
10 return (a>=0 a:-a);
11 }
大家看一眼第6行的输出结果:很多人认为是-5
int a
5
可实际的结果是这样吗 看下图

图(1)
是不是与我们期望的不一样
最后的输出结果与cout背后的汇编中堆栈有很大联系,我们知道汇编中堆栈是“后入先出”的存储区,执行第6行语句,从右向左依次把要输出的值压入堆栈,最后从上到下依次输出,第6行的汇编伪代码如下(以下代码不是严格意义上的汇编代码,为容易理解而写成):
push endl;//把换行符压入
push abs(a);//压入函数返回值,函数返回值压入堆栈需要两步:首先先执行cout<<"int a"<
push endl;
push a;输出a的值
到此所有的值都压入堆栈,并且此过程中执行其他语句(第9行)的输出结果在屏幕上已经显示出来,然后堆栈中的值依次出栈,在屏幕上先显示-5,再显示5;