无意中发现:
cout << cout;
输出是一些地址。这个地址是什么意思,为什么显示它?
我正在寻找这个问题。
谢谢
因为ostream
重载operator void*()
,这是调用的关闭匹配,所以打印operator <<
了强制转换的结果。(void*)cout
在你的情况下是那个地址。请记住,这cout
是一个对象。
基本上,调用转换为:
cout.operator<<((void*)cout);
cout
是一个ostream
具有重载的插入(<<
)运算符的对象。如果我们查看ostream
类的构造函数,有一个要传递的参数,它是一个指向streambuf
对象的指针。streambuf
对象通常与用于读取和写入数据的字符序列相关联。对于控制台应用程序,将有一个与标准输出相关联的字符缓冲区,在 cout 的情况下可能会在内部使用。文档中说我们不应该直接实例化ostream
对象,而是使用任何派生类,ofstream
或者ostringstream
转移对标准输出的注意力。
关于打印地址,我认为 Luchian Grigore 是对的。
这个问题将使您了解cout
对象的实例化方式和位置:对象 std::cout 是如何构造/实例化的