这可能是一个初学者的问题,了解cout如何工作可能是关键.如果有人可以联系到一个好的解释,那就太好了.
cout<<cout并cout<<&cout在linux x86机器上打印以4分隔的十六进制值.
MSN*_*MSN 16
cout << cout相当于cout << cout.operator void *().这是在C++ 11之前用来确定iostream是否处于失败状态的习惯用法,并在其中实现std::ios_base; 它通常返回的地址static_cast<std::ios_base *>(&cout).
cout << &cout打印出地址cout.
由于std::ios_base是虚拟基类cout,因此它可能不一定是连续的cout.这就是它打印不同地址的原因.
cout << cout正在使用内置转换void*为布尔测试目的.对于某些无趣的原因,您的实现使用std::cout对象中的4个字节的地址.在C++ 11中,这个转换被删除了,这不应该编译.
cout << &cout正在打印std::cout对象的地址.