2012-10-02 26 views
2

可能重複:
What is the correct answer for cout << c++ << c;?爲了在C++打印的

我有下面的代碼 -

int a= 7; 
const int &b = a; 
int &c = a; 

如果我使用

cout << endl << ++c << '\t' << a << '\t' << b << '\t' << c; 

它打印

"8 7 7 8" 

但是如果我用

cout << endl << a << '\t' << b << '\t' << ++c << '\t' << a << '\t' << b << '\t' << c; 

它打印

"8 8 8 8 8 8" 

究竟是如何發生這種情況?這與優化有關嗎?如果是的話,我怎麼能在ideone.com中關閉它?

+3

還有,當你說'的cout << ++ C語言的<<ç會發生什麼重複的地方;'。雖然我不確定在哪裏。 – chris

+0

http://stackoverflow.com/questions/10782863/what-is-the-correct-answer-for-cout-c-c – nneonneo

+0

@nneonneo,那是一個,謝謝。 – chris

回答

3

有效操作< <是一個函數調用,C++允許評價傳遞給函數在它喜歡的,因此++ÇINC首先完成的,相當合法,你的編譯器的任何命令的參數 - 我的根本有些不同。

Interstingly我的編譯器打印

8  8  8  7  7 

一些編譯器的功能則params的計算順序提供開關,但如果你真的需要使用它,我會問我自己的原因,這是有一些更代碼錯誤,而是以便攜的方式寫入。

2

abc都是同一個對象。然而,函數參數評估的順序是未定義的。所以,無論編譯器選擇首先評估什麼都可以。看起來,在你的第二個表達式中,它首先評估++c。避免問題的方法不是將修改與表達的其餘部分進行摺疊,即在輸出之前或之後增加c

+0

庫爾....是啊..我不會在實踐中跟隨此。 。我只是想嘗試一些隨機的東西,並面臨這個問題....它有什麼與優化或什麼? – ajayg

+0

評估順序未定義的大部分時間是允許優化機會或處理不同的實施約束。庫爾... –

+0

...謝謝..這是有幫助的。 – ajayg