簡體   English   中英

cout <之間有什么區別?

[英]What's the difference between cout<<cout and cout<<&cout in c++?

這可能是一個初學者的問題,了解cout如何工作可能是關鍵。 如果有人可以聯系到一個好的解釋,那就太好了。 cout<<coutcout<<&cout打印在linux x86機器上以4分隔的十六進制值。

cout << cout相當於cout << cout.operator void *() 這是在C ++ 11之前用來確定iostream是否處於失敗狀態的習慣用法,並在std::ios_base ; 它通常返回static_cast<std::ios_base *>(&cout)

cout << &cout打印出的地址cout

由於std::ios_basecout的虛擬基類,因此它可能不一定與cout連續。 這就是它打印不同地址的原因。

cout << cout使用內置轉換為void* ,用於布爾測試目的。 出於某些無趣的原因,您的實現使用了一個4字節的地址到std::cout對象中。 在C ++ 11中,這個轉換被刪除了,這不應該編譯。

cout << &cout正在打印std::cout對象的地址。

cout << &cout是通過cout的地址cout

cout << cout正在使用其operator void*打印隱式地將cout轉換為void*指針的值。

如前所述, cout << cout使用為bool測試提供的void*轉換( while (some_stream){ ... }等)

它打印值&cout + 4,因為轉換是在基本實現中完成的,並且轉換為它自己的類型,這來自libstdc ++

operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }

cout<<&cout正在經過的地址cout到流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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