2014-09-10 77 views
3

简而言之,我有这个类,我想移动包装的对象。何时std ::移动冗余?

std::string m_S; 
string_t(string_t&& s) 
    : m_S(s.m_S) 
{ 
} 

予省略周围的类结构,只是增加了完整性起见,部件m_S

我是否需要用std::move来包装成员访问权限,还是仅仅因为s作为右值引用而被传递?

+0

这里需要'std :: move',因为's'在这里是一个左值。有好的重复,我会尽力找到一个。 – juanchopanza 2014-09-10 15:38:06

回答

6

您确实需要move这里。 s.m_S是一个左值表达式,所以不会绑定到_rvalue_参考。

即使s本身就是一个左值表达,所以你也需要会move如果你想用它来移动构造一个变量。

+0

当你思考什么'std :: move'真的做什么和什么构成一个右值(临时)我想我开始得到它,虽然有些情况下这是为你做的,这不完全是自我解释的作为价值回报)。 – 2014-09-11 12:51:16

1

如果函数参数类型是rvalue-reference,则参数仍然是函数内部的左值(以及ctors init-list)。

因此,如果你的意思是真的需要使用std::move或等价物。