18

如果我有一个std::ostringstream名为 的对象oss,我知道我可以std::cout << oss.str()打印出字符串。但是这样做oss.str()会导致返回的字符串被复制。有没有办法直接打印底层streambuf

提前致谢!

4

1 回答 1

24

如果您使用的是std::ostringstream. 无法从中读取底层缓冲区(因此oin ostringstream),因此您必须依靠实现来为您执行此操作,通过str().

但是,如果您使用std::stringstream(注意缺少o),则底层缓冲区是可读的,并且basic_ostream' 具有从缓冲区读取的特殊重载:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss1;
    ss1 << "some " << 111605 << " stuff" << std::flush;

    std::cout << ss1.rdbuf() << std::endl;
    std::cout << ss1.str() << std::endl;
}

输出:

一些 111605 的东西
一些 111605 的东西

示例来自这里。)

这直接从底层缓冲区复制,没有中间副本。

于 2013-03-26T05:41:21.117 回答