在逛論壇的時候發現這個問題的,然後就動手查了下,也寫了下**測試
不過首先應該宣告的是 : c++中對於cout後面的表示式的求值順序是未定義的,具體的執行結果要由編譯器的實現來決定.
本人是在vc++ 6.0下編譯的.
測試**:
#include using namespace std;
int fun()
int main(void)
輸出結果: 123 (第乙個cout語句)
321 (第二個cout語句)
因為在我所用的編譯器下 cout後的表示式求值是從右向左的, 所以從右向左三個fun()函式的值分別是1, 2, 3
三個fun函式執行後的結果入棧. 如圖:
然後從棧頂取值, 輸出 3 2 1
同樣的對於getchar的例子,
如果輸入的是 ab , 先從右邊的getchar()函式開始讀取, 因麵右邊的讀的是a, 左邊的讀的是b, 入棧後
輸出時從棧頂依次取值, 輸出 b a
總結:1 該現象在c++標準中是未定義行為, 執行結果完全取決於編譯器實現
2 在6.0中是先從右向左計算各表示式的值後入棧, 然後從棧頂取值輸出.
3 此規則也適用於其它的一些輸出函式或表示式.
C 友元過載輸出操作符(下篇)
假設trip是乙個time物件。為顯示time的值,可以使用show 函式,然而,如果可以像下面這樣操作更好 cout trip make cout recognize time class?解釋 是可以被過載的c 運算子之一。cout是乙個 ostream 物件,它是智慧型的,能夠識別所有的c 基...
cout操作符的遞迴
參考 下面輸出結果是多少?include using namespace std int g 0 template intfoo t a intmain 結果是 輸出 t 輸出 1 輸出 1 輸出 2.2 輸出 0 輸出 3 234321 原因 1.cout操作符的遞迴呼叫和從右向左的順序。即 比如...
c 學習 oop 過載輸入輸出操作符
date 11 03 21 18 55 description 過載輸入輸出操作符 輸出操作符 過載 非成員函式 友元函式 少做格式化 輸入操作符過載 過載 處理輸入操作的錯誤 include using namespace std class sales item sales item const...