简而言之,我有这个类,我想移动包装的对象。何时std ::移动冗余?
std::string m_S;
string_t(string_t&& s)
: m_S(s.m_S)
{
}
予省略周围的类结构,只是增加了完整性起见,部件m_S
。
我是否需要用std::move
来包装成员访问权限,还是仅仅因为s
作为右值引用而被传递?
简而言之,我有这个类,我想移动包装的对象。何时std ::移动冗余?
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'真的做什么和什么构成一个右值(临时)我想我开始得到它,虽然有些情况下这是为你做的,这不完全是自我解释的作为价值回报)。 – 2014-09-11 12:51:16
如果函数参数类型是rvalue-reference,则参数仍然是函数内部的左值(以及ctors init-list)。
因此,如果你的意思是真的需要使用std::move
或等价物。
这里需要'std :: move',因为's'在这里是一个左值。有好的重复,我会尽力找到一个。 – juanchopanza 2014-09-10 15:38:06