如何将ostringstream直接写入cout

时间:2013-03-26 05:18:35

标签: c++

如果我有一个名为std::ostringstream的{​​{1}}对象,我知道我可以oss打印出字符串。但是执行std::cout << oss.str()会导致返回的字符串被复制。有没有办法直接打印基础oss.str()

提前致谢!

1 个答案:

答案 0 :(得分:10)

如果您使用std::ostringstream,则不会。无法读取此基础缓冲区(因此o中的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的东西

Example derived from here。)

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