2015-05-26 153 views
1

我想知道cout<<coutcout<<&cout之間在c++之間的實際差別?在我的編譯器中cout<<cout返回0x477864 & cout<<&cout隨時返回0x477860。它表明它們之間有1位數的差別。這些意義何在?cout << cout'和'cout <<&cout'在C++中的區別?

+0

http://ideone.com/JfKmxd –

+0

也許是一個多繼承的問題?就像cout可以隱式轉換爲其基類之一的指針,而&cout給出cout的第一個基類的地址。 – KABoissonneault

回答

9

當你這樣做:

cout << cout; 

你是依靠流的隱式轉換void*。使用此值(pre-C++ 11)來測試流的狀態。沒有指定實際值是什麼,如果流處於失敗狀態,它只需要爲NULL,否則就是非NULL。也許它會返回對象成員的地址,但它並不重要,並且已經定義了實現。

當你這樣做:

cout << &cout; 

,這是獲得的cout實際地址。

請注意,在C++ 11及更高版本中,第一個cout << cout;將不再編譯,因爲隱式轉換爲void*不再存在。而是有一個明確的轉換爲bool服務於相同的目的。

相關問題