如果我有一个名为std::ostringstream
的{{1}}对象,我知道我可以oss
打印出字符串。但是执行std::cout << oss.str()
会导致返回的字符串被复制。有没有办法直接打印基础oss.str()
?
提前致谢!
答案 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的东西
直接从底层缓冲区复制,没有中间副本。