간단히 말해서 래핑 된 객체를 이동하려는이 클래스가 있습니다. std :: move는 언제 중복됩니까?
std::string m_S;
string_t(string_t&& s)
: m_S(s.m_S)
{
}
는 그냥 완전성을 위해 멤버
m_S
추가 주변 클래스 구조를 생략한다.
회원 액세스를 std::move
으로 감쌀 필요가 있습니까? 아니면 s
이 값이있는 참조로 전달 되었기 때문에 그냥 작동합니까?
간단히 말해서 래핑 된 객체를 이동하려는이 클래스가 있습니다. std :: move는 언제 중복됩니까?
std::string m_S;
string_t(string_t&& s)
: m_S(s.m_S)
{
}
는 그냥 완전성을 위해 멤버
m_S
추가 주변 클래스 구조를 생략한다.
회원 액세스를 std::move
으로 감쌀 필요가 있습니까? 아니면 s
이 값이있는 참조로 전달 되었기 때문에 그냥 작동합니까?
여기에 move
이 필요합니다. s.m_S
은 왼쪽 값 표현이므로 _rvalue_
참조에 바인딩되지 않습니다. 당신이 변수를 이동-구축하는 것을 사용하기를 원한다면 당신은 또한 move
필요 했어 그래서
심지어 s
자체가 좌변 표현이다.
'std :: move'이 실제로 무엇을 의미하는지, 그리고 rvalue (임시)를 구성하는 것이 무엇인지 생각할 때, 나는 이것을 이해하기 시작했을 것이라고 생각한다. 값으로 반환). –
function-arguments 유형이 rvalue-reference 인 경우, 인수는 함수 내 lvalue (ctors init-list는 물론)입니다.
따라서 실제로는 std::move
또는 이와 동등한 것을 사용해야합니다.
'st' :: move'는's'가 여기의 lvalue이기 때문에 필요합니다. 주위에 좋은 중복이 있으며, 나는 하나를 찾으려고 노력할 것입니다. – juanchopanza