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하지 않으며 예외를 범위 외부로 전파할 수 없습니다. 생성 false
시 constant_expression
연산 noexcept(constant_expression)
자 또는 예외 사양이 없는 경우(소멸자 또는 할당 취소 함수 제외) 함수를 종료할 수 있는 잠재적 예외 집합이 모든 형식의 집합임을 나타냅니다.
함수가 직접 또는 간접적으로 호출하는 모든 함수도 noexcept
const
또는 되도록만 함수 noexcept
를 표시합니다. 컴파일러가 함수에 버블업 noexcept
될 수 있는 예외에 대한 모든 코드 경로를 반드시 검사 것은 아닙니다. 예외가 표시된 noexcept
std::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>)
{
// ...
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기