可能重复:
What's the difference between cout<<cout and cout<<&cout in c++?
我意外地发现:
cout << cout;
输出是一些地址。这个地址是什么意思,为什么会显示? 我正在寻找this question。
由于
答案 0 :(得分:10)
由于ostream
重载operator void*()
,并且这是对operator <<
的调用的结束匹配,因此会打印投射(void*)cout
的结果。在你的情况下是哪个地址。请记住,cout
是一个对象。
基本上,电话会转换为:
cout.operator<<((void*)cout);
答案 1 :(得分:3)
cout
是ostream
对象,其重载insertion(<<
) operator。如果我们查看ostream
类的构造函数,则会传递一个参数,该参数是指向streambuf
对象的指针。 streambuf
个对象通常与用于读取和写入数据的字符序列相关联。对于控制台应用程序,将有一个与标准输出相关联的字符缓冲区,在cout的情况下可能在内部使用。在文档中说我们不应该直接实例化ostream
对象,而是使用任何派生类,ofstream
或ostringstream
转移注意力从stdout。
关于打印的地址,我认为Luchian Grigore是对的。
这个问题可以帮助您了解cout
对象的实例化方式和位置:How is the object std::cout constructed/instantiated