C++ 从一个std::ostringstream重定向到另一个std::ostringstream
我需要将数据从一些C++ 从一个std::ostringstream重定向到另一个std::ostringstream,c++,std,c++03,ostringstream,C++,Std,C++03,Ostringstream,我需要将数据从一些std::ostringstream写入另一个std::ostringstream。当然,我可以使用str()函数 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(); std::ostrings
std::ostringstream
写入另一个std::ostringstream
。当然,我可以使用str()
函数
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();
std::ostringstream in;
std::ostringstream out;
在中,删除复制赋值运算符/复制构造函数。但是,您可以使用成员函数swap
(C++11)或std::swap
,来交换内容。或者,您可以使用移动赋值操作符(C++11)将一个移动到另一个。此解决方案仅适用于不关心源stringstream内容的情况
例如:
out = std::move(in); // C++11
out.swap(in); // C++11
std::swap(out, in);
PS:我刚刚意识到g++不编译上面的任何一行(它似乎不支持ostringstream的移动/交换),但是,clang++编译它。根据标准(27.8.4),交换/移动应有效。
请参见您可以重新分配相关的缓冲区:
os2.rdbuf(os1.rdbuf());
这实际上是对ostream的别名
事实上,您甚至可以直接从streambuffer指针IIRC构建ostream
类似地,您可以将整个缓冲区附加到另一个流,而无需重新分配:
std::cout << mystringstream.rdbuf(); // prints the stringstream to console
std::cout您如何在ostringstream上阅读?这个“std::ostringstream in;”不应该是“std::istringstream in;”吗?@Rush-谢谢。我修正了打字错误。