1 분 소요

개요

  • 예외가 발생하지 않는 함수에 정의
  • void func5() noexcept {}
  • 해당 함수에서 예외 발생 시 catch 되지 않고 크러쉬


예제

  • 코드
    #include <iostream>
    #include <string>

    using namespace std;

    void func1();
    void func2();
    void func3();

    class Test {
    	private:
    		int i;

    	public:
    		Test(int i) : i(i) {}
    		~Test() { cout << "~Test() - " << this->i << endl; }

    		void func(){};
    };

    void func1() {
    	cout << "func1() start" << endl;
    	func2();
    	cout << "func1() end" << endl;
    }
    void func2() {
    	cout << "func2() start" << endl;
    	func3();
    	cout << "func2() end" << endl;
    }
    void func3() {
    	cout << "func3() start" << endl;

    	Test t1(1);
    	Test *t2 = new Test(2);
    	t2->func();

    	throw out_of_range("aaa");

    	cout << "func3() end" << endl;
    }

    void func4(const int &i) {
    	switch (i) {
    	case 1:
    		throw 1;
    	case 2:
    		throw 'c';
    	case 3:
    		throw "aaa";
    	case 4:
    		throw string("bbb");
    	default:
    		throw out_of_range("ccc");
    	}
    }

    void func5() noexcept {}

    int main() {
    	try {
    		func1();
    		cout << "func() after" << endl;
    	} catch (out_of_range &e) {
    		cout << e.what() << endl;
    	}

    	try {
    		func4(1);
    	} catch (int &i) {
    		cout << "i : " << i << endl;
    	} catch (char &c) {
    		cout << "c : " << c << endl;
    	} catch (const char *pc) {
    		cout << "pc : " << pc << endl;
    	} catch (string &s) {
    		cout << "s : " << s << endl;
    	} catch (...) {
    		cout << "other catch" << endl;
    	}

    	func5();

    	cout << "main end" << endl;

    	return 0;
    }
  • 실행 결과
    func1() start
    func2() start
    func3() start
    ~Test() - 1
    aaa
    i : 1
    main end