C ++ 03 throw () 지정자 C ++ 11 noexcept의 차이점
사이에 다른 차이가 throw()
및 noexcept
가동 및 실행 시간을 확인하고 떨어져 있습니까?
Wikipedia C ++ 11 기사는 C ++ 03 throw 지정자가 더 이상 사용하지 않는다고 제안합니다.
왜 당신은 noexcept
모든 것을 다룰 수 있습니까?
[참고 : 언급 나는 이 질문 하고 이 문서를 .하지만, 중단의 고체 이유가 없어 수 있습니다]
지정 예외 자는 일반적으로 끔찍한 아이디어 이기 때문에 예외 지정자는 사용되지 않습니다 . noexcept
예외 지정자의 합리적으로 유용한 사용이기 때문에 추가되었습니다. 함수 가 예외를 던지지 않을 때를 아는 것 입니다. 따라서 그것은 이진 선택이됩니다 : 던질 함수와 던지지 않을 함수입니다.
noexcept
더 강력 throw()
하기 때문에 모든 던짐을 제거하는 대신 추가 noexcept
. noexcept
할당되는 시간이 부울로 해석됩니다. 부울이 참이면 noexcept
스틱입니다. 부울이 거짓 noexcept
이면가 고정되지 않고 throw 될 수 있습니다.
따라서 다음과 같이 할 수 있습니다.
struct<typename T>
{
void CreateOtherClass() { T t{}; }
};
합니까 CreateOtherClass
던져 예외? T
기본 생성자가의 할 수 난 웬지 - 할 수 있습니다. 우리는 어떻게 말합니까? 이렇게 :
struct<typename T>
{
void CreateOtherClass() noexcept(is_nothrow_default_constructible<T>::value) { T t{}; }
};
주어진 CreateOtherClass()
유형의 기본 생성자가 던지면 던질 것입니다. 이는 예외 예외 지정자의 주요 문제 중 하나 인 호출 스택을 전파 할 수없는 문제를 해결합니다.
으로이 작업을 수행 할 수 없습니다 throw()
.
noexcept
시간에 확인되지 않았습니다.
구현은 단지 실행될 때 모든 함수가 허용되지 않는 예외를 던지거나 던질 수 있습니다.
함수가 선언 할 때 noexcept
유일한 throw()
예외를 던지려고 할 때 유일한 예외는 하나의 호출 terminate
과 다른 호출 unexpected
과 후자의 예외 처리 스타일이 사용하지 않는 예외는 입니다.
std :: 예기치 않은 ()는 동적 예외 사양이 위반 될 때 C ++ 작동에 의해 호출됩니다. 예외 사양이 유형의 예외를 금지하는 함수에서 예외가 발생합니다.
std :: 예기치 않은 ()는 프로그램에서 직접 호출 될 수도 있습니다.
두 경우 모두 std :: 예기치 않은 현재 회의 std :: expected_handler를 호출합니다. 기본 std :: expected_handler는 std :: 종료를 호출합니다.
참고 URL : https://stackoverflow.com/questions/12833241/difference-between-c03-throw-specifier-c11-noexcept
'IT' 카테고리의 다른 글
Java 스위치 내에서 변수 선언 및 초기화 (0) | 2020.09.01 |
---|---|
Pandas GroupBy.agg ()를 사용하여 동일한 열의 여러 가지 상품 (0) | 2020.09.01 |
Python에서 링크를 열거 형으로 변환 (0) | 2020.09.01 |
서버에 동일한 Windows 서비스의 여러 인스턴스 설치 (0) | 2020.09.01 |
localhost에서 Facebook 애플리케이션 실행 (0) | 2020.09.01 |