【发布时间】:2011-09-17 23:27:52
【问题描述】:
下面的代码不是输出预期的字符串"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++ 中似乎是后者。
标签: c++ pointers implicit-conversion stringstream