noexcept(C++)

C++11: 함수가 예외를 throw할 수 있는지 여부를 지정합니다.

구문

noexcept-specifier:
noexcept
noexcept-expression
throw ( )
noexcept-expression:
noexcept ( constant-expression )

매개 변수

constant-expression
잠재적인 예외 형식 bool 집합이 비어 있는지 여부를 나타내는 형식의 상수 식입니다. 무조건 버전은 .에 해당합니다 noexcept(true).

설명

A noexcept-expression 는 일종의 예외 사양입니다. 함수를 종료하는 예외에 대해 예외 처리기와 일치할 수 있는 형식 집합을 나타내는 함수 선언에 대한 접미사입니다. 단항 조건 연산 noexcept(constant_expression) 자는 생성true될 때constant_expression, 그리고 해당 무조건적인 동의어를 noexcept사용하여 함수를 종료할 수 있는 잠재적인 예외 형식 집합이 비어 있음을 지정합니다. 즉, 함수는 예외를 throw하지 않으며 예외를 범위 외부로 전파할 수 없습니다. 생성 falseconstant_expression 연산 noexcept(constant_expression) 자 또는 예외 사양이 없는 경우(소멸자 또는 할당 취소 함수 제외) 함수를 종료할 수 있는 잠재적 예외 집합이 모든 형식의 집합임을 나타냅니다.

함수가 직접 또는 간접적으로 호출하는 모든 함수도 noexceptconst또는 되도록만 함수 noexcept 를 표시합니다. 컴파일러가 함수에 버블업 noexcept 될 수 있는 예외에 대한 모든 코드 경로를 반드시 검사 것은 아닙니다. 예외가 표시된 noexceptstd::terminate 함수의 외부 범위를 종료하는 경우 즉시 호출되며 범위 내 개체의 소멸자가 호출된다는 보장은 없습니다. 동적 예외 지정자 throw()대신 사용합니다noexcept. 동적 예외 사양 또는 사양은 C++11에서 더 이상 사용되지 않으며, 별칭noexcept(true)인 경우를 제외하고 throw()C++17 throw(optional_type_list) 에서 제거되었습니다. 예외가 호출 스택을 전파하는 것을 허용하지 않는 모든 함수에 적용 noexcept 하는 것이 좋습니다. 함수가 선언되면 noexcept컴파일러가 여러 다른 컨텍스트에서 보다 효율적인 코드를 생성할 수 있습니다. 자세한 내용은 예외 사양을 참조 하세요.

예시

인수를 복사하는 함수 템플릿은 복사되는 개체가 POD(일반 이전 데이터 형식)인 조건으로 선언 noexcept 될 수 있습니다. 이러한 함수는 다음과 같이 선언될 수 있습니다.

#include <type_traits>

template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
   // ...
}

참고 항목

예외 및 오류 처리에 대한 최신 C++ 모범 사례
예외 사양(throw, noexcept)