std::istringstream iss(std::move(result_string));
这个初始化根据我的理解一次声明并移动result_string。后来我这样用它:
while (iss >> result_string)
但我想分别声明iss
然后move()
。我该怎么办?
答案 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