std :: cout如何工作

时间:2012-07-09 07:42:59

标签: c++ cout

  

可能重复:
  What's the difference between cout<<cout and cout<<&cout in c++?

我意外地发现:

cout << cout;

输出是一些地址。这个地址是什么意思,为什么会显示? 我正在寻找this question

由于

2 个答案:

答案 0 :(得分:10)

由于ostream重载operator void*(),并且这是对operator <<的调用的结束匹配,因此会打印投射(void*)cout的结果。在你的情况下是哪个地址。请记住,cout是一个对象。

基本上,电话会转换为:

cout.operator<<((void*)cout);

答案 1 :(得分:3)

coutostream对象,其重载insertion(<<) operator。如果我们查看ostream类的构造函数,则会传递一个参数,该参数是指向streambuf对象的指针。 streambuf个对象通常与用于读取和写入数据的字符序列相关联。对于控制台应用程序,将有一个与标准输出相关联的字符缓冲区,在cout的情况下可能在内部使用。在文档中说我们不应该直接实例化ostream对象,而是使用任何派生类,ofstreamostringstream转移注意力从stdout。

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

这个问题可以帮助您了解cout对象的实例化方式和位置:How is the object std::cout constructed/instantiated