[英]How this cout will work?
我正在檢查一個代碼,並對此行感到困惑。
if( cout > 0 )
{
//some statements
}
請告訴我是否可以使用cout
。 以及它將如何工作?
cout
是ostream
類型(或其派生類型)的變量。 ostream
可以轉換為void *
(C ++ 11之前的版本)或bool
(C ++ 11)-這兩個轉換函數都會檢查文件流中的“錯誤狀態”,如果存在false
分別返回NULL
或false
錯誤)。 這兩個都將比較為零,因為零分別與NULL
和false
相同,因此該語句變為(void *)cout > NULL
或(bool) cout > false
,如果cout
不為NULL
或false
則為false
(這意味着“沒有錯誤”)。
[注意:使用p > NULL
,與NULL
的指針比較可能無法正常工作,因為指針可能是“負”,在這種情況下,它不大於NULL
我更想看看if (cout != 0)
還是if (!cout)
作為更安全/更好的選擇]。
std::cout
從std::basic_ios
繼承了explicit operator bool()
(C ++ 11)或operator void*()
(C ++ 11之前)。 兩者都有能力與0
比較。 但是,每個都有一個問題:
operator void*()
轉換(由於James Kanze在下面指出了這一點)將無法保證能按預期運行。 0也將轉換為void *
,然后,由於一個為null而另一個不是,因此未指定比較(N3485§5.9 / 2)。
在這種情況下,不會觸發explicit operator bool()
轉換,從而導致其無法編譯。 但是,我認為還沒有任何主庫實現在operator void*()
上使用它,即使它們應該這樣做。 如果Clang是C ++ 11完整的,那么Clang可能會在下一個版本中完成此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.