기본 Move 생성자가 noexcept로 정의되어 있습니까?
벡터는 재 할당 할 때 요소를 이동하거나 복사할지 여부를 결정하기 전에 이동 생성자가 noexcept로 레이블이 지정되었는지 확인하는 것 같습니다. 기본 이동 생성자가 noexcept로 정의되어 있습니까? 다음 문서를 보았지만 이것을 지정하지 않았습니다. http://en.cppreference.com/w/cpp/language/move_constructor
암시 적으로 선언 된 이동 생성자
클래스 유형 (구조, 클래스 또는 공용체)에 대해 사용자 정의 이동 생성자가 제공되지 않고 다음이 모두 참인 경우 : 사용자 선언 복사 생성자가 없습니다. 사용자 선언 복사 할당 연산자가 없습니다. 사용자 선언 이동 할당 연산자 사용자 선언 소멸자가 없습니다. 암시 적으로 선언 된 이동 생성자가 다음 섹션에 설명 된 조건으로 인해 삭제 된 것으로 정의되지 않은 경우 컴파일러는 이동 생성자를 클래스의 인라인 공용 멤버로 선언합니다. 서명 T :: T (T &&) 클래스는 T :: T (const T &&) 및 T :: T (T &&)와 같이 여러 이동 생성자를 가질 수 있습니다. 일부 사용자 정의 이동 생성자가있는 경우 사용자는 여전히 키워드 default를 사용하여 암시 적으로 선언 된 이동 생성자를 강제로 생성 할 수 있습니다.
대답은 15.4 / 14 (예외 사양)라고 생각합니다.
상속 생성자 (12.9)와 암시 적으로 선언 된 특수 멤버 함수 (Clause 12)에는 예외 사양이 있습니다. 경우
f
상속 생성자 또는 암시 적으로 선언 기본 생성자입니다 생성자, 복사 이동 생성자 , 소멸자, 복사 대입 연산자, 또는 이동 할당 연산자, 암시 적 예외 사양 지정 유형-IDT
의 경우와 경우에만T
의해 허용되는 예외 사양f
의 암시 적 정의에 의해 직접 호출 된 함수의f
직접 호출하는 함수가 모든 예외를 허용하고 예외 사양f
이있는 경우 모든 예외를 허용합니다.noexcept(true)
직접 호출하는 모든 함수는 예외를 허용하지 않습니다.
기본적으로 그것은 당신이 생각하는 것을 수행하며 암시 적으로 선언 된 이동 생성자는 noexcept
가능할 때마다 있습니다.
참고 URL : https://stackoverflow.com/questions/18653726/is-the-default-move-constructor-defined-as-noexcept
'Development Tip' 카테고리의 다른 글
데이터베이스에 구애받지 않는 Play 애플리케이션을 작성하고 최초 데이터베이스 초기화를 수행하는 방법은 무엇입니까? (0) | 2020.11.28 |
---|---|
왜`std :: initializer_list`는 종종 값으로 전달됩니까? (0) | 2020.11.28 |
플라스크에서 전역 변수는 스레드로부터 안전합니까? (0) | 2020.11.28 |
컨트롤러 작업 방법에 대한 출력 캐시를 프로그래밍 방식으로 지우는 방법 (0) | 2020.11.28 |
Java에서 매개 변수 실행 순서 보장? (0) | 2020.11.28 |