반응형
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 |