자체 이동 할당 및 표준 라이브러리
C 11에서 표준 라이브러리는 자체 이동 할당과 관련하여 특정 보장을 제공합니다. 표준에 따르면 함수 인수가 rvalue 참조 매개변수에 바인딩되는 경우 구현에서는 매개변수가 해당 인수에 대한 고유한 참조라고 가정할 수 있습니다.
다음 함수를 고려하세요.
template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; }
벡터 인수가 rvalue 참조 매개변수에 바인딩되므로 std::Vector
표준에 따르면 rvalue 참조 매개변수는 prvalue로 가정될 수 있으므로 자체 이동 할당 가능성이 배제됩니다. 그런 경우. selfAssign 함수에 전달된 벡터는 리소스가 없는 상태로 남아 있거나 이미 용량이 0인 경우 작동하지 않을 가능성이 높습니다.
그러나 표준의 최신 작업 초안인 N4618은 , 이러한 요구 사항을 약간 수정합니다. 특히, t와 rv가 동일한 객체를 참조하지 않는 경우 't = rv' 할당 후에 t는 할당 전에 rv의 동등한 값만 포함하면 될 수도 있음을 나타냅니다. 그럼에도 불구하고 할당 후 rv의 상태는 지정되지 않은 상태로 유지됩니다.
위 내용은 C 11의 Rvalue 참조 매개변수를 사용하여 자체 이동 할당이 가능합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!