[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 키워드는 컴파일러에서 최적화 및 코드 안정성을 강조하는 데 사용되고, 예외 사양은 예외를 내뱉는 함수의 동작을 명확히하는 데 사용됩니다.

참고 문헌: