initializer_list 및 Move 의미 체계
C의 초기화_list 유형은 중괄호로 묶인 값 목록으로 컨테이너를 초기화하는 데 자주 사용됩니다. 그러나 일반 컨테이너와 달리 초기화_목록은 값 의미를 따르지 않습니다. 결과적으로 다음과 같은 일반적인 질문이 제기됩니다.
요소를 std::initializer_list
이 질문에 대한 대답은 '아니요'입니다. 이렇게 하면 이동 중인 요소가 이동 전용 유형인 경우에도 복사본이 생성됩니다. 이는 초기화 파일의 start() 및 end() 함수가 const 값에 대한 포인터를 반환하기 때문입니다. std::move가 const 값에 적용되면 결과는 의미 있게 이동할 수 없는 불변 rvalue 참조입니다. 대신 const T& 유형의 함수 매개변수에 바인딩되어 복사 의미 체계가 생성됩니다.
initializer_list가 임시 객체 목록을 저장하기 위한 것이라는 점을 고려하면 이 동작은 예상치 못한 것처럼 보일 수 있습니다. 그러나 컴파일러의 재량에 따라 유형을 const 또는 변경 가능하게 만드는 것은 목록의 보다 효율적인 정적 초기화를 가능하게 한다고 믿어집니다.
업데이트: 초기화_list 이동 전용 유형 지원에 대한 제안
피드백에 대한 응답으로 초기화_목록에서 이동 전용 유형을 지원하기 위한 ISO 제안 초안이 작성되었습니다. 이 제안은 아직 검토 중이지만 이동 전용 유형으로 작업할 때 초기화_목록의 현재 제한 사항에 대한 잠재적인 솔루션을 제공합니다.
위 내용은 요소를 `std::initializer_list` 밖으로 이동할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!