3

重複の可能性:
c++のcout<<coutとcout<<&coutの違いは何ですか?

私は誤って見つけました:

cout << cout;

出力はいくつかのアドレスです。このアドレスはどういう意味ですか、なぜ表示されますか?
私はこの質問を探しています。

ありがとう

4

2 に答える 2

10

ostreamオーバーロードoperator void*()、およびそれがへの呼び出しのクローズマッチであるため、operator <<キャストの結果(void*)coutが出力されます。あなたの場合、どちらがそのアドレスです。coutそれがオブジェクトであることを忘れないでください。

基本的に、呼び出しは次のように変換されます。

cout.operator<<((void*)cout);
于 2012-07-09T07:44:51.693 に答える
3

coutオーバーロードされたinsertion()演算子を持つostreamオブジェクトです。クラスのコンストラクターを見ると、オブジェクトへのポインターである渡される引数があります。オブジェクトは通常、データの読み取りと書き込みに使用する文字シーケンスに関連付けられています。コンソールアプリケーションの場合、coutの場合に内部で使用される可能性のある標準出力に関連付けられたそのような文字バッファがあります。ドキュメントでは、オブジェクトを直接インスタンス化することは期待されていませんが、派生クラスのいずれかを使用するか、stdoutから注意をそらすことが期待されていると述べられています。<<ostreamstreambufstreambufostreamofstreamostringstream

印刷される住所に関しては、LuchianGrigoreが正しいと思います。

coutこの質問により、オブジェクトがインスタンス化される方法と場所についてのアイデアが得られます。オブジェクトstd::coutはどのように構築/インスタンス化されますか

于 2012-07-09T08:46:13.217 に答える