>백엔드 개발 >C++ >C 11의 Rvalue 참조 매개변수를 사용하여 자체 이동 할당이 가능합니까?

C 11의 Rvalue 참조 매개변수를 사용하여 자체 이동 할당이 가능합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-10 13:52:02664검색

Is Self Move Assignment Possible with Rvalue Reference Parameters in C  11?

자체 이동 할당 및 표준 라이브러리

C 11에서 표준 라이브러리는 자체 이동 할당과 관련하여 특정 보장을 제공합니다. 표준에 따르면 함수 인수가 rvalue 참조 매개변수에 바인딩되는 경우 구현에서는 매개변수가 해당 인수에 대한 고유한 참조라고 가정할 수 있습니다.

다음 함수를 고려하세요.

template<class T>
std::vector<T> selfAssign(std::vector<T> v) {
  v = std::move(v);
  return v;
}

벡터 인수가 rvalue 참조 매개변수에 바인딩되므로 std::Vector::operator=(Vector&& other)의 구현은 other가 다음과 같다고 가정할 수 있습니다. 가치관. 결과적으로 selfAssign 함수에서 v에 대한 자체 이동 할당은 불가능합니다.

표준에 따르면 rvalue 참조 매개변수는 prvalue로 가정될 수 있으므로 자체 이동 할당 가능성이 배제됩니다. 그런 경우. selfAssign 함수에 전달된 벡터는 리소스가 없는 상태로 남아 있거나 이미 용량이 0인 경우 작동하지 않을 가능성이 높습니다.

그러나 표준의 최신 작업 초안인 N4618은 , 이러한 요구 사항을 약간 수정합니다. 특히, t와 rv가 동일한 객체를 참조하지 않는 경우 't = rv' 할당 후에 t는 할당 전에 rv의 동등한 값만 포함하면 될 수도 있음을 나타냅니다. 그럼에도 불구하고 할당 후 rv의 상태는 지정되지 않은 상태로 유지됩니다.

위 내용은 C 11의 Rvalue 참조 매개변수를 사용하여 자체 이동 할당이 가능합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.