Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从一个std::ostringstream重定向到另一个std::ostringstream_C++_Std_C++03_Ostringstream - Fatal编程技术网

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-谢谢。我修正了打字错误。