C 中cout流的輸出順序

2021-08-29 07:48:30 字數 1125 閱讀 6456

先來看一段**:

#includeusing namespace std;

int hello1();

int hello2();

int main()

int hello1()

int hello2()

我第一次看到這段**,認為輸出的順序就是:

a=hello1()

b=hello2()

但是真正的執行結果呢,我們來看看:

hello2()

hello1()

a=1b=2

為什麼呢?

因為cout輸出時,先從右往左掃瞄,將資料讀入緩衝區,然後再從左往右輸出。所以,從右往左讀取緩衝區的時候,先遇到函式hello2(),那麼先執行函式hello2(),然後將函式的返回值作為資料讀取到緩衝區。

也就是說如果我們在輸出流中呼叫子函式的時候,cout在從右往左掃瞄的時候,一旦遇到子函式,那麼它就會立即執行這個子函式,如果子函式中有輸出語句,那麼程式就會立即執行這個輸出語句,然後再將這個子函式的返回值存到資料快取區中,等到cout流掃瞄到最左邊的時候,再把剛才存到資料快取區中的資料一併輸出,並且輸出的順序是從左往右,這乙個特點有點像堆疊中的先進後出的原則。我們需要注意的是,如果我們想在cout輸出流中呼叫子函式的時候,這個被呼叫的子函式必須是帶有返回值的函式,不能是乙個無返回值的void型別,比如說如果我們把剛才程式中的乙個子函式更改一下,程式機會報錯:

因為在c++中,<< 為插入運算子,它表示把它後面的東西插入到輸出流中,它不允許插入乙個沒有任何東西的量,我們可以插入乙個變數、乙個字串或者乙個帶有返回值的子函式等等。

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

首先看乙個例子 int fun1 int fun2 int main 輸出結果是 num2 num1 1 2 為什麼呢?為什麼不是num11num22呢?這裡涉及到cout輸出流的執行順序問題。cout的輸出順序有如下規律 計算順序 自右至左 輸出順序 自左至右 cout作為輸出流,有乙個緩衝區,先...

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

首先看乙個例子 int fun1 int fun2 int main 輸出結果是 num2 num1 1 2 為什麼呢?為什麼不是num11num22呢?這裡涉及到cout輸出流的執行順序問題。cout的輸出順序有如下規律 計算順序 自右至左 輸出順序 自左至右 cout作為輸出流,有乙個緩衝區,先...

C 輸出流cout方法

輸出指定字數的字串。basic ostream write const char type s,streamsize n 1 write遇到空字元時不會停止 2 即使超出邊界,write仍繼續列印 3 可用於資料資料 需將數值資料強制轉換為char 計數制函式 十進位制 十六進製制 八進位制 調整字...