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是一个ostream具有重载的插入(<<)运算符的对象。如果我们查看ostream类的构造函数,有一个要传递的参数,它是一个指向streambuf对象的指针。streambuf对象通常与用于读取和写入数据的字符序列相关联。对于控制台应用程序,将有一个与标准输出相关联的字符缓冲区,在 cout 的情况下可能会在内部使用。文档中说我们不应该直接实例化ostream对象,而是使用任何派生类,ofstream或者ostringstream转移对标准输出的注意力。

关于打印地址,我认为 Luchian Grigore 是对的。

这个问题将使您了解cout对象的实例化方式和位置:对象 std::cout 是如何构造/实例化的

于 2012-07-09T08:46:13.217 回答