[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를 참조하세요.