C++輸出流cout的執行順序問題

晚餐吃什麼發表於2018-11-21

首先看一個例子:

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。

https://blog.csdn.net/gao1440156051/article/details/51332052

相關文章