C++輸出流cout的執行順序問題
首先看一個例子:
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
相關文章
- c++ cout 格式輸出C++
- 關於defer執行順序問題
- sql中的or與and的執行順序問題SQL
- SQL語句中的AND和OR執行順序問題SQL
- SQL中rownum和order by的執行順序的問題SQL
- 【Oracle】where條件執行順序(上篇的問題延伸)Oracle
- C++輸入輸出常用格式(cin,cout,stringstream)C++
- connect by與where條件執行順序問題
- 22道js輸出順序問題,你能做出幾道JS
- JavaScript的執行順序JavaScript
- Sql執行順序SQL
- join方法應用之一——按順序輸出三個執行緒執行緒
- C++程式丟擲異常後執行順序C++
- unittest.TestCase中測試用例執行順序問題
- js基礎進階–promise和setTimeout執行順序的問題JSPromise
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- JavaScript執行順序分析JavaScript
- 任務執行順序
- for語句執行順序
- laravel Event執行順序Laravel
- mySQL 執行語句執行順序MySql
- 關於 Promise 的執行順序Promise
- Spring Aop的執行順序Spring
- SQL 語句的執行順序SQL
- CSS規則的執行順序CSS
- Java類的基本執行順序Java
- SQL 執行順序 你懂的SQL
- ajax回撥函式執行順序帶來的同步非同步問題函式非同步
- C++初始化,之不明白篇 cout<<x<<endl 與 cout<<"x = "<<cout<<x<<endl的輸出的值會不一樣C++
- c++入門:輸入輸出流C++
- [C++]輸入/輸出流類庫C++
- 執行緒間的協作(3)——管道輸入/輸出流執行緒
- OJ刷題之《輸入三個字串,按由小到大的順序輸出》字串
- sql mysql 執行順序 (4)MySql
- SQL語句執行順序SQL
- js執行順序Event LoopJSOOP
- JavaScript for迴圈 執行順序JavaScript
- JavaScript 執行順序淺析JavaScript