3

我想将 a 的内容输出ostringstream到其他流(例如std::cout)。我知道我可以使用std::ostringstream::str(),但我认为将流内容复制到字符串然后再复制到另一个流会有开销。我发现我可以使用std::ostringstream::rdbuf()评论建议有 25 票)。但它会中断std::cout,如下面的测试程序的输出所示。难道我做错了什么?

#include <iostream>
#include <sstream>

int main(int argc, char const *argv[])
{
    std::ostringstream ss;
    ss << "some data" << std::endl;
    std::cerr << std::cout << std::endl;
    std::cout << "start" << std::endl;
    std::cout << ss.str();
    std::cout << ss.rdbuf();
    std::cout << "end" << std::endl;
    std::cerr << std::cout  << std::endl;
    return 0;
}

结果是:

0x6013b8
start
some data
0
4

1 回答 1

2

您的问题是,正如您可能从名称中所期望的那样,rdbuf()an 的缓冲区是只写的(通过方法返回字符串)。您无法通过缓冲区指针从中读取数据。ostringstreamostringstreamstr()

将您的更改ostringstreamstringstream,它应该可以正常工作。

于 2013-05-21T19:36:22.757 回答