본문 바로가기
프로그래밍 언어/C++

[C++] noexcept

by 까망 하르방 2025. 3. 20.
반응형

noexcept 키워드

• 함수가 예외가 있는지 없는지 조사

• 함수가 "예외 없음"을 표시

 

#include <iostream>

void f1() { }
void f2(int a, int b) { throw 1; }

int main()
{
	bool b1 = noexcept(f1());
	bool b2 = noexcept(f2(1, 2));

	printf("%d %d\n", b1, b2); // ?
}



실제 함수 실행하는 것이 아니다.
함수 구현부까지 확인하는 것이 아니다.
그렇기에 f1 에서 예외가 없더라도 컴파일러는 알 수 있는 방법이 없다.



함수가 예외 없음을 알리려면
함수 선언 뒤에 noexcept 키워드를 붙인다.

#include <iostream>

void f1() noexcept { }
void f2(int a, int b) { throw 1; }

int main()
{
	bool b1 = noexcept(f1());
	bool b2 = noexcept(f2(1, 2));

	printf("%d %d\n", b1, b2); // ?
}



결과적으로 noexcept 키워드는
해당 함수 선언 뒤에 "예외 없음" 이라고 선언되었는지 확인하는 용도라고 할 수 있다.


noexcept(true) / noexcept(false)

 

[예제]
noexcept 인자로 true/false 값을 줄 수 있다.
인자로 주어지는 표현식이 noexcept 인지 조사 가능하도록 하기 위함이다.

#include <iostream>

void foo() noexcept {}

void boo(int a) noexcept {}
void boo(double a) {}

template<typename T>
void foo(T arg) noexcept(noexcept(boo(arg)))
{
	foo();
	boo(arg);
}

int main()
{
	printf("%d\n", noexcept(foo(1)));
	printf("%d\n", noexcept(foo(1.2)));
}



void foo(T arg) noexcept(noexcept(boo(arg))) 에서
foo 는 noexcept(boo(arg)) 결과를 확인한다.

noexcept(boo(arg)) 전달되는 arg 타입에 따라 noexcept 여부가 결정된다.
int → noexcept(true)
double → noexcept(false)

 

 

Q) noexcept 붙은 함수에서 예외가 발생하면?

A) std::terminate 호출

 


Q) 왜 "예외 없음"을 알리는가?

A) 예외 여부에 따라 최적화 코드 작성 가능
 ex) std::move_if_noexcept()


[예제]

#include <iostream>

void fast_algorithm()
{
	// 성능은 좋지만 실패(예외) 가능성이 있음
	printf("1...\n");
}

void slow_algorithm() noexcept
{
	// 느리지만 실패하지 않음
	printf("2...\n");
}

int main()
{
	if (noexcept(fast_algorithm()))
	{
		fast_algorithm();
	}
	else
	{
		slow_algorithm();
	}
}



개발 초기에는 불안정한 코드 보다 안전한 코드를 선택할 것이다.
하지만 개발 진행에 따라
fast_algorithm 안정성이 보장된다면
「void fast_algorithm() noexcept」 처리하면 된다.

 

 

📌 [C++] 오류 처리 방식 (Error Handling)

 

[C++] 오류 처리 방식 (Error Handling)

오류 처리 방식 (Error Handling)① 약속된 함수 반환값 ② 예외(Exception) 사용 ③ 성공/실패 결과가 모두 담을 수 있는 타입 반환 [예제]Connect 실패 시 어떻게 처리할 것인가?→ 프로세스 종

zoosso.tistory.com

반응형

댓글