2016-07-03 9 views
-1

私の最初の理解は、出力が端末の出力を指していることですが、それが正しいかどうかはわかりません。"cout << cout"がアドレスを出力するのはなぜですか?

おそらく、端末の出力ではなく、接続されているメモリアドレスです。

私は混乱していますが、どんな内容なのか分かりません。

EDIT:

私はそれが正しい、アドレスである、出力は0x467f84あるstd::cout << std::cout;しますか?

+2

この現象を見つけるために使用したコードを追加してください。 OSとコンパイラの情報も追加してください。 –

+2

[No Repro](http://coliru.stacked-crooked.com/a/5bf0e1f8affab64b) –

+0

g ++を使用すると、タイトルに記述されている動作が発生するため、コードとして追加しました。元気に戻す(元に戻した)... –

答えて

5

以前のC++ 11 std::basic_iosは、ストリームを条件として使用できるように非明示的なtype conversion function to void*を持っていました。

特殊フラッグを使用しない限り、バージョン5より前のGCCはビルドされません。つまり、を取るoperator<< overloadがストリームを出力するときに使用され、動作につながります。

フラグ-std=c++11を使用してC++ 11以降のモードでビルドした場合は、コンパイラエラーが発生するはずです。

関連する問題