28

我有std::stringstream对象ss1。现在,我想从这个副本创建另一个副本。

我试试这个:

std::stringstream ss2 = ss1;

或者:

std::stringstream ss2(ss1)

两者都不起作用

错误信息是这样的:

std::ios::basic_ios(const std::ios &) 不能从 bsl::basic_stringstream, bsl::allocator>::basic_stringstream(const bsl::basic_stringstream, bsl::allocator>&) 访问。

4

2 回答 2

43

实际上,流是不可复制的(尽管它们是可移动的)。

根据您的使用情况,以下方法效果很好:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss1;
    ss1 << "some " << 123 << " stuff" << std::flush;

    std::stringstream ss2;
    ss2 << ss1.rdbuf(); // copy everything inside ss1's buffer to ss2's buffer

    std::cout << ss1.str() << std::endl;
    std::cout << ss2.str() << std::endl;
}

输出:

一些 123 东西
一些 123 东西

于 2010-08-09T17:30:51.167 回答
10

由于std::stringstream 不提供复制构造函数,您必须从std::string ss1输出构建它:

std::stringstream ss2(ss1.str());
于 2010-08-09T17:28:20.080 回答