[英]What's the difference between cout<<cout and cout<<&cout in c++?
這可能是一個初學者的問題,了解cout如何工作可能是關鍵。 如果有人可以聯系到一個好的解釋,那就太好了。 cout<<cout
和cout<<&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_base
是cout
的虛擬基類,因此它可能不一定與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.