>백엔드 개발 >C++ >초기 C 11 초안에는 암시적 이동 생성자와 할당 연산자가 없는 이유는 무엇입니까?

초기 C 11 초안에는 암시적 이동 생성자와 할당 연산자가 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 10:18:13539검색

Why Were Implicit Move Constructors and Assignment Operators Absent in Early C  11 Drafts?

초기 C 11 초안의 암시적 이동 생성자와 할당 연산자

C에서 기본 복사 생성자와 할당 연산자가 널리 구현되었음에도 불구하고, C 11 표준의 초기 초안에 기본 이동 생성자와 할당 연산자가 없으면 사람들 사이에서 의문이 제기되었습니다.

초기 부재 이유

이동 작업의 암시적 생성은 C 커뮤니티 내에서 지속적인 논쟁의 주제였습니다. C 11 표준의 초기 초안에는 이동 불가능한 유형에 의존하는 코드 보존에 대한 우려로 인해 이러한 암시적 기능이 부족했습니다. 더욱이 할당 연산자를 활용하는 이동 불가능한 객체에 대한 std::move의 동작은 문제를 복잡하게 만들었습니다.

현재 사양

11월 N3225 사양 기준으로, 클래스가 이동 생성자를 명시적으로 정의하지 않으면 다음에서 기본값으로 암시적으로 선언됩니다. 조건:

  • 사용자 선언 복사 생성자 없음
  • 사용자 선언 복사 할당 연산자 없음
  • 사용자 선언 이동 할당 연산자 없음
  • 아니요 사용자 선언 소멸자
  • 이동을 암시적으로 삭제하지 않음 constructor

이동 할당 연산자의 암시적 선언에도 비슷한 조건이 적용됩니다. 이러한 변경 사항은 암시적 이동 생성에 대한 더 엄격한 조건을 옹호하는 N3203 및 N3201에 설명된 원칙과 일치합니다.

해결 방법

초기에 암시적 이동 작업이 없는 경우 C 11 초안에서 한 가지 해결 방법은 이동 할당 연산자와 이동 생성자를 수동으로 구현하는 것입니다. 모든 클래스에서 이러한 연산자를 구현하지 않으려면 매크로 솔루션을 사용할 수 있습니다. 스택 오버플로 질문에 대한 GManNickG의 답변이 적절한 예를 제공합니다.

위 내용은 초기 C 11 초안에는 암시적 이동 생성자와 할당 연산자가 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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