打印Stringstream输出指针

Max*_*xpm 2 c++ pointers stringstream implicit-conversion

"Bar"以下代码不是输出预期的字符串,而是输出看起来像指针的内容.

#include <sstream>
#include <iostream>

int main()
{
    std::stringstream Foo("Bar");
    std::cout << Foo << std::endl; // Outputs "0x22fe80."
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这可以通过使用来解决Foo.str(),但它在过去给我带来了一些问题.是什么导致这种奇怪的行为 它在哪里记录?

Lig*_*ica 6

这可以通过使用Foo.str()来解决,但它在过去给我带来了一些问题.是什么导致这种奇怪的行为 它在哪里记录?

这一点都不奇怪.

流是流,而不是字符串.

您可以使用成员函数获取[string]缓冲区.str().这不是一种解决方法:它是API.它应该记录在您的C++标准库引用中,如果不是,那么您的引用是不完整/错误的.

(什么有点奇怪的是,你得到一个内存地址,而不是编译错误;这是由于使用的安全布尔成语在前期的C++ 0x标准库,覆盖另一个答案.)