我在类中有以下函数
void add_state(std::string &&st) {
state.emplace_back(st); // state is a vector
}
st
根据我的理解,是一个左值(在这种情况下对字符串的右值引用)。如果,我想搬家st
到最后一个元素state
,我应该使用state.emplace_back(std::move(st))
?如果我按照上面写的方式保留它会发生什么?
编辑1(如何的示例add_state
叫做):
// do a series of operations to acquire std::string str
add_state(std::move(str));
// also note that str will never be used again after passing it into add_state
如果我做会更好吗add_state(std::string &st)
反而?在这种情况下,我想我可以简单地调用它add_state(str)
?
[...]我应该使用state.emplace_back(std::move(st))
?
Yes.
如果我按照上面写的方式保留它会发生什么?
您已正确识别出st
是一个左值,所以它被复制。
如果我做会更好吗add_state(std::string &st)
反而?在这种情况下,我想我可以简单地调用它add_state(str)
?
你可以,但你不应该。std::move
只是类型杂耍,它本身不做任何事情(特别是,它不移动任何东西)。实际操作发生在里面std::string::basic_string(std::string &&)
这是由emplace_back
当它收到后std::string &&
。将您自己的参数设置为左值引用除了让调用者感到惊讶之外没有任何效果,调用者会得到他们的值std::string
没有吃过std::move
就他们而言。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)