[c++] noexcept 예약어의 사용법
C++11 표준 이후, noexcept
예약어가 추가되었으며, 이는 함수가 예외를 발생시키지 않음을 나타냅니다. noexcept
를 사용하면 컴파일러가 함수에 대한 예외 처리 코드를 생성하지 않아 성능을 향상시킬 수 있습니다.
기본 사용법
noexcept
예약어를 사용하여 예외가 발생하지 않음을 표시하려면 다음과 같이 함수 선언 뒤에 noexcept
를 추가합니다:
void myFunction() noexcept {
// 함수 내용
}
함수가 예외를 던질 수 있는 경우에는 noexcept를 사용하지 않습니다. 또한, noexcept
예약어를 사용하면 소멸자에서 예외를 던질 때에도 자동으로 std::terminate
가 호출되어 프로그램이 종료될 수 있습니다.
예외 없이 보장된 함수
noexcept
예약어는 특히 move 생성자, move 할당 연산자 및 소멸자에서 유용합니다. 이들 함수는 예외를 던지지 않을 것이며, 이를 컴파일러에게 보장할 수 있습니다.
class MyClass {
public:
// Move 생성자
MyClass(MyClass&& other) noexcept {
// move 작업 수행
}
// Move 할당 연산자
MyClass& operator=(MyClass&& other) noexcept {
// move 작업 수행
return *this;
}
// 소멸자
~MyClass() noexcept {
// 소멸 작업 수행
}
};
이와 같이 noexcept
예약어를 사용하면 컴파일러가 최적화를 수행할 수 있습니다.
noexcept
연산자
함수가 noexcept
로 표시되었는지 여부를 확인하기 위해 noexcept
연산자를 사용할 수 있습니다:
void myFunction() noexcept {
// 함수 내용
}
bool isNoexcept = noexcept(myFunction()); // true로 설정됨
결론
noexcept
예약어는 함수의 예외 여부를 명시적으로 나타내는 데 사용됩니다. 예외를 던지지 않는 함수에는 noexcept
를 사용하여 컴파일러가 최적화하도록 지시할 수 있습니다.
더 많은 정보와 예제는 cppreference.com를 참조하세요.