cout<之间有什么区别?

时间:2011-09-20 17:17:52

标签: c++ cout

这可能是一个初学者的问题,理解cout如何工作可能是关键。如果有人可以联系到一个好的解释,那就太好了。 cout<<coutcout<<&cout在linux x86计算机上打印以4分隔的十六进制值。

5 个答案:

答案 0 :(得分:16)

cout << cout相当于cout << cout.operator void *()。这是在C ++ 11之前用来确定iostream是否处于失败状态的惯用语,并在std::ios_base中实现;它通常返回static_cast<std::ios_base *>(&cout)的地址。

cout << &cout打印出cout的地址。

由于std::ios_basecout的虚拟基类,因此它可能不一定与cout连续。这就是它打印不同地址的原因。

答案 1 :(得分:5)

cout << cout正在使用为布尔测试目的而存在的void*内置转换。出于某种无趣的原因,您的实现使用了一个4字节的地址到std::cout对象中。在C ++ 11中,这个转换被删除了,这不应该编译。

cout << &cout正在打印std::cout对象的地址。

答案 2 :(得分:4)

cout << &cout正在传递cout cout的地址。

cout << cout正在使用cout打印隐式投射void*operator void*指针的值。

答案 3 :(得分:3)

如上所述,cout << cout使用为bool测试提供的void*转换(while (some_stream){ ... }等)。

它打印值&amp; cout + 4,因为转换是在基础实现中完成的,并且转换为它自己的类型,这是from libstdc++

operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }

答案 4 :(得分:0)

cout<<&cout正在将cout的地址传递给流。