2012-10-20 56 views

回答

3

既不是。這是雙倍的。 3.0具有雙倍型,並且3被提升爲倍增值;雙倍加倍的結果是雙倍。這與結果無關。

還有一堆的ostreams重載的左移位的運營商,並有一個在右邊一個double類型的參數,所以就是這樣就是所謂的一個:

template <class Elem, class Traits> 
basic_ostream<Elem, Traits>& basic_ostream<Elem, Traits>::operator<<(double d); 

對於什麼是值得,這是一個成員函數,而不是一個自由函數。

+0

感謝您的答案..但是什麼規則決定什麼樣的結果將是什麼樣的? (對於給定的一對不同類型的操作數) – mahela007

+0

@ mahela007 - 它有點複雜,因爲有很多類型。但基本上,整數類型被提升爲表達式中最大的整型,而浮點型被提升爲最大的浮點類型。如果表達式既包含整型也包含浮點類型,則整型將轉換爲浮點類型。這會將所有內容都轉換爲相同的類型,這就是結果的類型。現在,這只是一個草圖;它留下了很多細節,你可以在其他地方閱讀。 –

1

它通過利用過載

ostream& operator<<(ostream& output, int i) { 
    // It's an int 
} 

ostream& operator<<(ostream& output, float f) { 
    // it's a float 
} 

C++編譯器會選擇基於輸入類型<<經營者的適當的過載優點執行此操作。如果你傳遞一個float它將搭載具有float與同爲int

0

結果3.0 + 3操作的是重載雙從而COUT將應用< <運營商double類型。

0

您可以使用調試器的步入功能來確定這一點。它將進入它的哪種方法是你的答案