'C++' Exception Handling

토스트·2024년 12월 8일
0

'C++' basic

목록 보기
1/35

예외 처리(Exception Handling)

프로그램 실행 중에 발생할 수 있는 예외적인 상황을 처리하는 메커니즘을 제공합니다. C++의 예외 처리 모델은 다른 언어들과 비슷하게 try, catch, throw 키워드를 사용하여 구현됩니다.

  • try : 예외가 발생할 가능성이 있는 코드를 실행합니다. 예외가 발생하지 않으면 정상적으로 try 블록이 끝날 때까지 실행이 됩니다.
  • throw : 예외를 던집니다. 예외를 던지면 현재 실행 중이던 코드는 즉시 중단되고, catch 블록으로 프로그램 흐름이 이동합니다.
  • catch : throw로 던져진 예외를 잡아서 처리합니다. catch는 예외가 발생한 타입에 맞는 블록이 실행됩니다.

catch(...)는 모든 예외를 처리하는 catch 블록입니다. 예외 객체의 타입에 관계없이 모든 예외를 잡습니다.

#include <iostream>

using namespace std;

void TestFunction(int value) {
    if (value < 0) {
        throw value;  // int type으로 예외를 던짐
    }
    else if (value == 0) {
        throw 0.0;  // double type으로 예외를 던짐
    }

    cout << "Value is: " << value << endl;
}

int main() {
    try {
        int num;
        cout << "Enter a number: ";
        cin >> num;

        TestFunction(num); // 예외가 발생할 수 있는 함수 호출
    }
    catch (int exception) { // int 타입 예외 처리
        cout << "Caught 'num < 0' exception: " << exception << endl;
    }
    catch (double exception) { // double 타입 예외 처리
        cout << "Caught 'num == 0' exception: " << exception << endl;
    }
    catch (...) { // 모든 예외 처리
        cout << "An unknown exception occurred!" << endl;
    }

    return 0;
}
  • std::exception 클래스는 모든 예외 클래스의 기본 클래스로, 다른 예외 클래스들은 이 클래스를 상속받습니다.

exception 라이브러리

C++의 기본 예외 클래스를 제공하며, 예외 처리 메커니즘에서 예외 객체를 관리하는 기본적인 클래스인 std::exception 클래스 외에도 std::exception을 상속받은 여러 클래스들이 포함되어 있습니다.

stdexcept 라이브러리

std::exception을 상속받은 더 구체적인 예외 클래스를 제공합니다. 이 클래스들은 프로그램에서 자주 발생할 수 있는 특정한 오류 상황을 처리하는 데 유용합니다. 예를 들어, 잘못된 인자 값이나 범위를 벗어난 인덱스 등을 처리하는 데 사용되는 예외 클래스들이 이 라이브러리에 포함됩니다.

0개의 댓글