如何为std :: istringstream单独进行初始化和赋值,并在下面的情况下移动?

时间:2013-08-26 04:01:39

标签: c++

std::istringstream iss(std::move(result_string));这个初始化根据我的理解一次声明并移动result_string。后来我这样用它:

while (iss >> result_string)

但我想分别声明iss然后move()。我该怎么办?

2 个答案:

答案 0 :(得分:2)

根本无法将字符串移动到字符串流中。是的,您可以随意键入std::istringstream iss(std::move(result_string));,但不会将字符串移动到流中。它会复制它。除非你的stringstream实现有一些非标准的附加内容,否则不会。

您可以使用str函数随时重新初始化字符串流:

istringstream theStream(...);

//stuff

theStream.str(result_string); //Stream reinitialized.

如果你想把它包裹在std::move中以让自己感觉更好,你可以。但它仍然不会离开它。 move不是一种导致事物被移动的神奇药膏;它只是一个花哨的类型演员。实际的移动是通过构造函数进行的,而stringstreams没有可以从std::string个对象移动的构造函数。

答案 1 :(得分:1)

您可以使用std::istringstream::str()设置内部缓冲区。由于std::string始终由const&执行,因此您可以在内部安全地省略std::move()std::stringbuf中使用的存储 a {{ 1}}:

std::string