簡體   English   中英

此指令如何工作?

[英]How this cout will work?

我正在檢查一個代碼,並對此行感到困惑。

if( cout > 0 )
{
    //some statements
}

請告訴我是否可以使用cout 以及它將如何工作?

coutostream類型(或其派生類型)的變量。 ostream可以轉換為void * (C ++ 11之前的版本)或bool (C ++ 11)-這兩個轉換函數都會檢查文件流中的“錯誤狀態”,如果存在false分別返回NULLfalse錯誤)。 這兩個都將比較為零,因為零分別與NULLfalse相同,因此該語句變為(void *)cout > NULL(bool) cout > false ,如果cout不為NULLfalse則為false (這意味着“沒有錯誤”)。

[注意:使用p > NULL ,與NULL的指針比較可能無法正常工作,因為指針可能是“負”,在這種情況下,它不大於NULL我更想看看if (cout != 0)還是if (!cout)作為更安全/更好的選擇]。

std::coutstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM