首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从std::ostringstream流重定向到另一个std::ostringstream流

从std::ostringstream流重定向到另一个std::ostringstream流
EN

Stack Overflow用户
提问于 2014-11-27 15:36:28
回答 2查看 359关注 0票数 1

我需要将数据从某个std::ostringstream写入另一个std::ostringstream。当然,我可以使用str()函数

代码语言:javascript
复制
std::ostringstream in;
std::ostringstream out;

in << "just a test"; // it's just an example. I mean that stream in is filled somewhere
...
out << in.str();

我想知道是否有更直接的方法来做同样的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-27 16:20:40

您可以重新分配关联的缓冲区:

代码语言:javascript
复制
os2.rdbuf(os1.rdbuf());

可以有效地化名为ostream。

实际上,您甚至可以直接从流缓冲区指针IIRC构造ostream

类似地,您可以将整个缓冲区附加到另一个流中,而无需重新分配:

代码语言:javascript
复制
std::cout << mystringstream.rdbuf(); // prints the stringstream to console
票数 2
EN

Stack Overflow用户

发布于 2014-11-27 15:51:55

复制赋值操作符/复制构造函数被删除。但是,可以使用成员函数swap (C++11)或std::swap交换内容。或者,您可以使用移动赋值运算符(C++11)将其中一个移动到另一个。此解决方案仅在不关心源字符串内容的情况下才有效。

示例:

代码语言:javascript
复制
out = std::move(in); // C++11
out.swap(in); // C++11
std::swap(out, in); 

PS:我刚刚意识到g++不编译上面的任何一行(看起来它不支持移动/交换用于compile流),但是,clang++会编译它。根据标准(27.8.4),交换/移动应该有效。请参阅C++ compiler does not recognize std::stringstream::swap

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27174234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档