字符串流

std::ostringstream 是一个类,其对象看起来像一个输出流(也就是说,你可以通过 operator<< 写入它们),但实际上存储了写入结果,并以流的形式提供它们。

请考虑以下简短代码:

#include <sstream>
#include <string>                                                                                                                          

using namespace std;

int main()
{
    ostringstream ss;
    ss << "the answer to everything is " << 42;
    const string result = ss.str(); 
}   

这条线

ostringstream ss;

创造这样一个对象。首先像常规流一样操作此对象:

ss << "the answer to everything is " << 42;

然而,在此之后,可以像这样获得结果流:

const string result = ss.str();

(字符串 result 将等于 the answer to everything is 42)。

当我们有一个已经定义了流序列化的类,并且我们想要一个字符串形式时,这非常有用。例如,假设我们有一些类

class foo 
{   
    // All sort of stuff here.
};  

ostream &operator<<(ostream &os, const foo &f);

要获取 foo 对象的字符串表示,

foo f;

我们可以使用

ostringstream ss; 
ss << f;
const string result = ss.str();        

然后 result 包含 foo 对象的字符串表示。