我想将 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

最佳答案

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

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

关于c++ - ostringstream 中断 cout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16677538/

10-13 08:34