[c++] noexcept 명시와 함수 호출
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_throw
를 try...catch
문으로 둘러싸지 않으면 컴파일 에러가 발생합니다.
결론
noexcept
는 함수가 예외를 던지지 않음을 명시하기 위한 키워드로, 컴파일러에게 해당 함수의 특성에 대한 정보를 전달합니다. 이를 통해 성능 최적화와 예외 처리 메커니즘을 일치시키기 위해 함수 호출 시에도 주의가 필요합니다.
참고: cppreference - noexcept specifier