我想将ostringstream
的内容输出到其他一些流(例如std::cout
)。我知道我可以使用std::ostringstream::str()
,但我认为将流内容复制到字符串然后再转到另一个流时会有开销。我发现我可以使用std::ostringstream::rdbuf()
(Comment suggesting that has 25 votes)。但它会中断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
答案 0 :(得分:2)
您的问题是rdbuf()
的{{1}}缓冲区正如您所期望的那样,只写(ostringstream
返回字符串通过ostringstream
方法)。您无法通过缓冲区指针读取数据。
将您的str()
更改为ostringstream
,它应该可以正常使用。