2

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

while (iss >> result_string)

但我想声明iss然后move()分开。我能怎么做?

4

2 回答 2

2

您根本无法将字符串移动到字符串流中。是的,您可以输入std::istringstream iss(std::move(result_string));任何您想要的内容,但它不会将字符串移动到流中。它会复制它。除非你的stringstream实现有一些非标准的补充。

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

istringstream theStream(...);

//stuff

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

如果你想把它包裹起来std::move让自己感觉更好,你可以。但它仍然不会离开它。move不是使东西移动的神奇药膏;这只是一个花哨的类型转换。实际的移动是通过构造函数发生的,而字符串流没有可以从std::string对象移动的构造函数。

于 2013-08-26T04:08:08.927 回答
1

您可以使用std::istringstream::str()来设置内部缓冲区。由于std::string始终使用: 您可以安全地在内部const&省略: ,因此使用的存储不是:std::move()std::stringbufstd::string

iss.str(result_string);
于 2013-08-26T04:08:47.690 回答