C++ 11에서 반환 된 std::vector
지역 변수는 항상 이동됩니까? 지역 변수에 대한
, 심지어 값에 의한 매개 변수는, 컴파일러는 기준이있는 경우에도, 이동이나 복사도가 어떤 이유로 생략 할 수있는 경우 항상
시도이 (먼저 이동합니다 충족). 실패 할 경우,이 사본을 다시 시도합니다
§12.8 [class.copy] p32
복사 작업의 생략에 대한 기준을 충족하거나 소스 객체가 함수 매개 변수는 사실에 대한 저장이 충족 될
, 이고 복사 할 객체를 lvalue로 지정하면 객체의 값이 인 것처럼 복사의 생성자를 선택하는 오버로드 해상도가 먼저 수행됩니다.과부하 해결이 실패하거나 선택한 생성자의 첫 번째 매개 변수 유형이 객체 유형 (cv 한정 일 수 있음)에 대한 rvalue 참조가 아닌 경우 객체를 lvalue로 간주하여 다시 오버로드 확인이 수행됩니다. [참고 : 복사 제거가 수행되는지 여부에 관계없이이 2 단계 과부하 해결을 수행해야합니다. elision이 수행되지 않으면 호출 할 생성자를 결정하고 호출을 생략해도 선택한 생성자에 액세스 할 수 있어야합니다. -end note]
벡터가 로컬 변수 대신 로컬 변수의 멤버 일 경우 어떻게 될까요?
하위 개체는 복사 제거 기준을 충족하지 않으므로 이동을 시도하지 않습니다. (어떤 바보, 이럴이지만, 그게 지역의 경우 하위 객체가 완벽하게 정상적으로 이동 될 수 있기 때문에이 현재. 나는 두 연결해야한다고 생각하지 않는 방법입니다.) 분명히 전역 변수를 반환
것 옮기지 마라. 다른 어떤 경우에는 이동되지 않습니까?
참조는 분명히 이동되지 않습니다. 그것 이외에, 나는 정말로 다른 것을 생각할 수 없다.
출처
2012-06-28 15:22:45
Xeo
참고 사항 [이 질문에] (http://stackoverflow.com/q/9532608/500104). – Xeo