[c++] noexcept 가상 함수
#include <iostream>

class Base {
public:
    virtual void foo() noexcept {
        std::cout << "Base::foo" << std::endl;
    }
};

class Derived : public Base {
public:
    void foo() noexcept override {
        std::cout << "Derived::foo" << std::endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->foo();
    delete ptr;
    return 0;
}

이 예제에서 Base 클래스는 foo 함수를 noexcept 지정자와 함께 가상으로 선언합니다. 이후 Derived 클래스에서 이 함수를 다시 재정의하고 noexcept 지정자로 지정합니다.

noexcept 지정자는 함수가 예외를 발생시키지 않음을 나타냅니다. 이는 컴파일러가 최적화 및 예외 처리 코드를 생성하지 않아도 되기 때문에 성능상의 이점을 가져올 수 있습니다.

가상 함수에서 noexcept 지정자를 사용하는 것은 해당 함수가 예외를 발생시키지 않는다는 것을 명시적으로 나타내기 위함입니다. 이는 파생 클래스에서 이 함수를 오버라이드할 때 예외가 발생하지 않는다는 것을 보장합니다.

이러한 방식으로 noexcept 지정자는 가상 함수에서도 유용하게 활용될 수 있습니다.

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