【发布时间】:2020-04-21 14:35:17
【问题描述】:
我在一个类中有以下函数
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) 调用它?
【问题讨论】:
-
我想了解更多关于使用 r 值引用、std::move 和
emplace_back的信息,因为这似乎是一个重要的用例。如果我有一个函数调用返回一个值,并且我想将它存储在一个数组中,如何确保对象直接在数组中实例化?vec.emplace_back(mkobj());? `obj&& o=mkobj(); vec.emplace_bac(std::move(o))``?什么时候有必要,我什么时候可以确定它已经被优化了?