[c++] noexcept 명시와 함수 호출
  1. noexcept란 무엇인가?
  2. noexcept의 사용 예제
  3. 함수 호출에서의 noexcept
  4. 결론

noexcept란 무엇인가?

noexcept는 C++11 표준에서 도입된 예외 처리 명시자로, 함수가 예외를 던지지 않음을 나타냅니다. 이는 컴파일러에게 해당 함수가 예외를 던지지 않는다는 정보를 전달하고, 이를 활용하여 최적화를 수행할 수 있게 합니다.


noexcept의 사용 예제

void func() noexcept {
    // 예외를 던지지 않는 함수 본문
}

위 코드에서 func 함수에 noexcept 명시자가 사용되어 있습니다. 이는 해당 함수가 예외를 던지지 않음을 나타내며, 컴파일러는 이 정보를 활용하여 최적화를 수행할 수 있습니다.


함수 호출에서의 noexcept

noexcept 명시자가 있는 함수를 호출할 때, 호출하는 함수의 예외 처리 메커니즘과 일치하도록 주의해야 합니다.

void may_throw() {
    throw 42;
}

void no_throw() noexcept {
    // 예외를 던지지 않는 함수 본문
}

int main() {
    try {
        may_throw();
    } catch (...) {
        std::cout << "예외 발생!" << std::endl;
    }

    no_throw();  // 컴파일 에러: noexcept 함수 호출 시에도 예외 처리를 고려해야 함
}

no_throw 함수는 noexcept 명시자가 있으므로, 이를 호출하는 함수에서도 예외 처리를 고려해야 합니다. 따라서 위의 코드에서 no_throwtry...catch 문으로 둘러싸지 않으면 컴파일 에러가 발생합니다.


결론

noexcept는 함수가 예외를 던지지 않음을 명시하기 위한 키워드로, 컴파일러에게 해당 함수의 특성에 대한 정보를 전달합니다. 이를 통해 성능 최적화와 예외 처리 메커니즘을 일치시키기 위해 함수 호출 시에도 주의가 필요합니다.

참고: cppreference - noexcept specifier