C++ 예외 처리 - noexcept

진경천·2023년 10월 30일
0

C++

목록 보기
66/90

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를 결정할 수 있다.

profile
어중이떠중이

0개의 댓글