noexcept 함수에서 어떠한 예외처리를 호출하게 되면 std::terminate()를 호출 하여 강제 종료 한다.
함수명() noexcept(공백 or 논리값)
기본적으로 대부분의 함수들은 noexcept(false)의 형태를 취하고 있다.
소멸자와 같이 예외처리 되면 치명적인 문제가 발생하는 경우는 noexcept(true)의 형태를 띈다.
#include <iostream>
using std::cout, std::endl;
void func() noexcept {
throw 1;
}
int main() {
try {
func();
}
catch (int e) {
cout << e << endl;
}
}
void func() noexcept {
throw 1;
}
int main() noexcept(noexcept(func())) {
void (*fp)() noexcept = func;
}
func()가 noexcept(true) 상태이니까 noexcept(noexcept(func()))의 값은 noexcept(true)가 된다.
함수 포인터로 가리킬 때 noexcept인 함수이면 noexcept를 붙여주ㅜ어야 한다.
void func() noexcept {
throw 1;
}
void func1() {
}
int main() noexcept(noexcept(func()) && noexcept(func1())) {
}
위의 메인함수는 noexcept(false)이며
위처럼 논리식을 이용하여 noexcept를 결정할 수 있다.