cout輸出操作符求值順序

2021-06-02 10:05:41 字數 688 閱讀 2623

在逛論壇的時候發現這個問題的,然後就動手查了下,也寫了下**測試

不過首先應該宣告的是 :     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...