关于C++输出流cout的执行顺序问题

来源:互联网 发布:pc架子鼓软件下载 编辑:程序博客网 时间:2024/05/29 21:29

首先看一个例子:

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

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

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

 

输出结果是

num2

num1

 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。

 

网上也有人质疑这种想法,但是这种想法很好的解释了出现的现象,暂且认为这是对的吧。

0 0