2009-08-26 21 views
9

this answer我談論使用std::ifstream對象的轉換爲bool來測試流是否仍處於良好狀態。我查看Josuttis書籍以獲取更多信息(如果您有興趣,請參閱第600頁),結果發現iostream對象實際上超載operator void*。它在流不良(它可以隱式轉換爲false)時返回一個空指針,否則返回一個非空指針(隱式轉換爲true)。爲什麼他們只是超載operator bool爲什麼iostream對象不能重載operator bool?

回答

13

它看起來像C++ 0x標準部分27.4.4.3有答案(強調我的)。

operator unspecified-bool-type() const; 

返回:如果fail()那麼值 將評估在布爾 上下文假;否則將會在布爾上下文中求值爲 。 返回的價值類型不得爲 可轉換爲int

注意:此轉化可以在 上下文其中bool預計 (例如,如果條件)中使用;然而,隱式轉換(例如,到int) 可能發生的bool不允許 允許,從而消除了某些 用戶錯誤的來源。

+0

此答案已過時。它沒有標準化,因爲增加了顯式的轉換函數。 – Potatoswatter 2013-02-21 14:17:16

-1

最新C++ 11要求:

explicit operator bool() const; 

見C++ 11 27.5.5.4-1。儘管如此,「顯式」對我來說似乎很奇怪。

+1

'explicit'是它被添加的原因。像這樣的'explicit'轉換函數僅適用於* only *轉換,在這種情況下,它將通過中間'bool'轉換將'iostream'轉換爲'bool',而不是'int'。閱讀本頁面的其他答案,瞭解安全布爾成語。 – Potatoswatter 2012-05-15 06:54:27

相關問題