[c++] noexcept와 예외 사양의 차이
C++에서 예외 처리는 코드 안정성과 예상치 못한 문제에 대한 대비를 위해 중요한 요소입니다. noexcept
키워드와 예외 사양은 예외 처리와 관련하여 중요한 역할을 합니다. 이 둘의 차이에 대해 알아보겠습니다.
1. noexcept
키워드
noexcept
키워드는 함수가 예외를 발생시키지 않음을 나타냅니다. 이는 함수가 발생시킨 예외를 처리하지 않고 상위 호출자에게 전파시키지 않음을 의미합니다. 이 키워드를 사용함으로써 컴파일러는 해당 함수가 예외를 발생시키지 않음을 보장하고 최적화할 수 있습니다.
void foo() noexcept {
// 예외를 발생시키지 않음
}
위의 foo
함수의 경우 noexcept
특성을 갖고 있으며, 예외를 발생시키지 않음을 보장합니다.
2. 예외 사양
예외 사양은 함수가 발생시킬 수 있는 예외의 종류를 명시하는 것입니다. 다음과 같이 선언합니다.
void bar() throw(int, std::runtime_error) {
// int 또는 std::runtime_error 예외를 발생시킬 수 있음
}
위의 bar
함수는 int
또는 std::runtime_error
예외를 발생시킬 수 있다는 것을 명시하고 있습니다.
차이점
noexcept
키워드는 함수가 예외를 발생시키지 않음을 나타내고, 예외 사양은 함수가 발생시킬 수 있는 예외의 종류를 명시합니다. 또한, noexcept
키워드는 컴파일러에서 최적화 및 코드 안정성을 강조하는 데 사용되고, 예외 사양은 예외를 내뱉는 함수의 동작을 명확히하는 데 사용됩니다.
참고 문헌:
- https://en.cppreference.com/w/cpp/language/noexcept_spec
- https://en.cppreference.com/w/cpp/language/throw
- https://www.learncpp.com/cpp-tutorial/73-exceptions-try-catch-and-throw/