>백엔드 개발 >C++ >요소를 `std::initializer_list` 밖으로 이동할 수 있나요?

요소를 `std::initializer_list` 밖으로 이동할 수 있나요?

DDD
DDD원래의
2024-12-20 14:10:14478검색

Can Elements Be Moved Out of a `std::initializer_list`?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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