这可能是一个初学者的问题,理解cout是如何工作的可能是这里的关键。如果有人能链接到一个很好的解释,那就太好了。在linux x86机器上,cout<<cout和cout<<&cout打印以4分隔的十六进制值。
发布于 2011-09-21 01:24:59
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相邻。这就是为什么它打印一个不同的地址。
发布于 2011-09-21 01:24:15
cout << cout使用内置到void*的转换,该转换用于布尔测试目的。出于一些不起眼的原因,您的实现使用的地址是std::cout对象中的4个字节。在C++11中,此转换已被删除,并且不应进行编译。
cout << &cout正在打印std::cout对象的地址。
发布于 2011-09-21 01:23:10
cout << &cout正在将cout的地址传递给cout。
cout << cout使用其operator void*打印将cout隐式转换为void*指针的值。
https://stackoverflow.com/questions/7489069
复制相似问题