C++/Exception 2021. 3. 22. 00:10

예외 처리의 기본

try, throw, catch

  • try : 코드를 실행할 부분

  • throw : 예외 상황이 발생하면 해당 정보를 던지는 부분

  • catch : try 내부에서 throw가 발생했을 경우 이를 받아주는 부분

    #include <iostream>
    
    using namespace std;
    
    int            main()
    {
      double    x;
      cin >> x;
    
      try
      {
        if (x < 0.0)
          throw string("Negative input");
        cout << std::sqrt(x) << endl;
      }
      catch (string error_message)
      {
        cout << error_message << endl;
      }
    }
    
    /* stdin
    -10
    */
    
    /* stdout
    Negative input
    */

  • 묵시적 형변환이 허용되지 않는다.

    ex) std::string -> const char* 불가능

    #include <iostream>
    
    using namespace std;
    
    int            main()
    {
      double    x;
      cin >> x;
    
      try
      {
        if (x < 0.0)
          throw "Negative input";  // 런타임 에러
        cout << std::sqrt(x) << endl;
      }
      catch (string error_message)
      {
        cout << error_message << endl;
      }
    }

주의사항

  • 연산량이 많아서 처리속도가 느려지므로, 성능이 중요한 프로그램에서는 가급적 사용을 지양해야 한다.

    • 조건문으로 거를 수 있는 예외 상황은 조건문을 사용해서 처리하는게 좋다.

    • 예측 불가능한 예외 사항에 대해서만 사용하는게 좋다.