C++輸出流cout的執行順序問題
阿新 • • 發佈:2018-11-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
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