简单来说,我有一个类,想要移动封装的对象。
std::string m_S;
string_t(string_t&& s)
: m_S(s.m_S)
{
}
为了完整起见,我省略了周围的类结构,只添加了成员m_S
。
我是否需要使用std::move
包装成员访问,还是直接使用s
作为右值引用传递即可?
简单来说,我有一个类,想要移动封装的对象。
std::string m_S;
string_t(string_t&& s)
: m_S(s.m_S)
{
}
为了完整起见,我省略了周围的类结构,只添加了成员m_S
。
我是否需要使用std::move
包装成员访问,还是直接使用s
作为右值引用传递即可?
在这里确实需要使用 move
。因为 s.m_S
是一个左值表达式,所以无法与一个 _rvalue_
引用绑定。
即使 s
本身也是一个左值表达式,所以如果您想要使用它来移动构造一个变量,您还需要使用 move
。
std::move
的实际作用以及什么构成了rvalue(临时值)时,我认为我开始理解了,尽管有时会有一些自动完成的情况,这并不完全容易理解(例如按值返回)。 - John Leidegren
std::move
,因为s
在此处是一个左值。周围有很多好的重复内容,我会尝试找到一个。 - juanchopanza