而不是输出期望的字符串"Bar"
,下面的代码输出看起来是指针的东西。打印字符串流输出指针
#include <sstream>
#include <iostream>
int main()
{
std::stringstream Foo("Bar");
std::cout << Foo << std::endl; // Outputs "0x22fe80."
return 0;
}
这可以通过周围使用Foo.str()
来的工作,但它引起了我一些问题,在过去。什么导致这种奇怪的行为?它在哪里记录?
既然这已经回答了,我不妨把这个地址的意思,以防万一你好奇。通常,为了允许流在布尔上下文中被测试,运算符void *被重载,这会导致(在一些实现中)像'operator void *()const {return(fail()?0:(void *)this)这样的代码。 }(如果没有设置失败标志)将返回对象本身的地址。在一些实现中,这意味着该类的成员或虚拟表指针的地址,至少在vC++中它似乎对后者进行操作。 – lccarrasco