私は誤って見つけました:
cout << cout;
出力はいくつかのアドレスです。このアドレスはどういう意味ですか、なぜ表示されますか?
私はこの質問を探しています。
ありがとう
ostream
オーバーロードoperator void*()
、およびそれがへの呼び出しのクローズマッチであるため、operator <<
キャストの結果(void*)cout
が出力されます。あなたの場合、どちらがそのアドレスです。cout
それがオブジェクトであることを忘れないでください。
基本的に、呼び出しは次のように変換されます。
cout.operator<<((void*)cout);
cout
オーバーロードされたinsertion()演算子を持つostream
オブジェクトです。クラスのコンストラクターを見ると、オブジェクトへのポインターである渡される引数があります。オブジェクトは通常、データの読み取りと書き込みに使用する文字シーケンスに関連付けられています。コンソールアプリケーションの場合、coutの場合に内部で使用される可能性のある標準出力に関連付けられたそのような文字バッファがあります。ドキュメントでは、オブジェクトを直接インスタンス化することは期待されていませんが、派生クラスのいずれかを使用するか、stdoutから注意をそらすことが期待されていると述べられています。<<
ostream
streambuf
streambuf
ostream
ofstream
ostringstream
印刷される住所に関しては、LuchianGrigoreが正しいと思います。
cout
この質問により、オブジェクトがインスタンス化される方法と場所についてのアイデアが得られます。オブジェクトstd::coutはどのように構築/インスタンス化されますか