C++/기타

[C++ keyword] noexcept

sseram 2023. 3. 2. 21:55
반응형

c++11 ~

 

 

이 함수는 예외를 throw하지 않아요~ 라고 컴파일러에게 알려주는 키워드.

알려주면 뭐가 좋나?

컴파일러가 컴파일 할 때에 최적화를 좀 더 잘 해준다고 한다.

 

 

사용법 :

 

void func1() noexcept;
void swap() noexcept(true);
void func3() noexcept(false);

 

 

이런 식으로.

 

noexcept == noexcept(true) 이고,

true, false를 써 놓은 곳엔 다른 표현식이 들어갈 수 있다.

그것을 이용하면

 

 

template<class T>
T someFunc() noexcept(sizeof(T) < 4);

 

이런 식으로 조건부로 noexcept를 걸어줄 수도 있다.

 

 

 

 

 

 

 

다만 noexcept로 선언하여 컴파일러에게 '이 함수는 에러가 발생하지 않아!' 라고 알려줬는데, 그 내부에서 에러가 발생하면 어떻게 될까?

 

 

warning은 뜨지만 빌드는 잘 된다.

 

다만 뒤질뿐.

 

 

std::terminate 가 호출된다고 한다.

 

 

컴파일러에게 최적화 여지를 더 많이 주고, 실제 standard library에서도 많이 사용하고 있지만

 

 

그만큼 위험하다고 하니, 정말 확실한 것을 제외하곤 사용하지 말도록 하는게 나아 보인다.

 

 

 

 

 

https://en.cppreference.com/w/cpp/language/noexcept_spec

 

반응형

'C++ > 기타' 카테고리의 다른 글

[C++] DLL로 class export / import - 1  (0) 2023.03.16
[C++ Metaprogramming] enable_if / enable_if_t  (0) 2023.03.07
[C++ String] string 나누기. string split  (0) 2023.03.04
[C++ keyword] explicit 란?  (4) 2023.02.25
Virtual 소멸자 이유  (0) 2022.05.16