2014-09-10 5 views
3

간단히 말해서 래핑 된 객체를 이동하려는이 클래스가 있습니다. std :: move는 언제 중복됩니까?

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

는 그냥 완전성을 위해 멤버 m_S 추가 주변 클래스 구조를 생략한다.

회원 액세스를 std::move으로 감쌀 필요가 있습니까? 아니면 s이 값이있는 참조로 전달 되었기 때문에 그냥 작동합니까?

+0

'st' :: move'는's'가 여기의 lvalue이기 때문에 필요합니다. 주위에 좋은 중복이 있으며, 나는 하나를 찾으려고 노력할 것입니다. – juanchopanza

답변

6

여기에 move이 필요합니다. s.m_S왼쪽 값 표현이므로 _rvalue_ 참조에 바인딩되지 않습니다. 당신이 변수를 이동-구축하는 것을 사용하기를 원한다면 당신은 또한 move 필요 했어 그래서

심지어 s 자체가 좌변 표현이다.

+0

'std :: move'이 실제로 무엇을 의미하는지, 그리고 rvalue (임시)를 구성하는 것이 무엇인지 생각할 때, 나는 이것을 이해하기 시작했을 것이라고 생각한다. 값으로 반환). –

1

function-arguments 유형이 rvalue-reference 인 경우, 인수는 함수 내 lvalue (ctors init-list는 물론)입니다.

따라서 실제로는 std::move 또는 이와 동등한 것을 사용해야합니다.

관련 문제