HOWTO · C++

C++에서 범위를 벗어난 예외 발생

이 문서에서는 C++에서 범위를 벗어난 예외를 throw하는 방법에 대해 설명합니다. 또한 C++에서 범위를 벗어난 예외를 throw하는 동안 발생할 수 있는 오류에 대해서도 설명합니다.

C++에서는 try-catch 블록을 사용하여 예외를 처리할 수 있습니다. throw 문을 사용하여 명시적으로 예외를 throw할 수도 있습니다.

이 문서에서는 C++에서 범위를 벗어난 예외를 throw하는 방법에 대해 설명합니다.

C++에서 범위를 벗어난 예외 발생

C++에서 범위를 벗어난 예외를 발생시키려면 예외 개체를 만들 수 있습니다. 이를 위해 out_of_range() 생성자를 사용할 수 있습니다.

out_of_range() 생성자는 표준 C++ 라이브러리에 정의되어 있습니다. 문자열 객체를 입력 인수로 사용하고 범위를 벗어난 예외를 반환합니다.

다음 예제와 같이 throw 문을 사용하여 예외를 throw할 수 있습니다.

#include <iostream>

int main() {
  int number = 100;
  if (number > 50) {
    throw std::out_of_range("I am an exception.");
  }
  return 0;
}

출력:

terminate called after throwing an instance of 'std::out_of_range'
  what():  I am an exception.
Aborted

여기에서 먼저 숫자라는 변수를 만들었습니다. 그런 다음 숫자의 값이 50보다 큰지 확인했습니다.

그렇다면 표준 C++ 라이브러리에 정의된 범위를 벗어난 예외가 발생한 것입니다.

try-catch 블록을 사용하여 범위를 벗어난 예외를 처리할 수도 있습니다. try 블록에서 예외를 발생시킵니다.

범위를 벗어난 예외를 포착하고 catch 블록에서 예외를 처리했음을 인쇄합니다. 다음 예제에서 이를 관찰할 수 있습니다.

#include <iostream>

int main() {
  int number = 100;
  try {
    if (number > 50) {
      throw std::out_of_range("I am an exception.");
    }
  } catch (std::out_of_range) {
    std::cout << "I am here. Exception caught and handled.";
  }
  return 0;
}

출력:

I am here. Exception caught and handled.

위의 출력은 범위를 벗어난 예외를 처리한 후 프로그램이 정상적으로 종료되었음을 보여줍니다. 반면 이전 프로그램은 예외를 처리하지 않았기 때문에 중단되었습니다.

C++에서 범위를 벗어난 예외를 던지는 동안 오류가 발생했습니다.

아래와 같이 C++에서 범위를 벗어난 예외를 발생시키는 프로그램을 작성하는 것이 때때로 가능합니다.

#include <iostream>

int main() {
  int number = 100;
  try {
    if (number > 50) {
      throw std::out_of_range;
    }
  } catch (std::out_of_range) {
    std::cout << "I am here. Exception caught and handled.";
  }
  return 0;
}

위의 코드를 실행하면 프로그램은 다음 실행 추적과 함께 오류로 실행됩니다.

/tmp/EG06BKsTcd.cpp: In function 'int main()':
/tmp/EG06BKsTcd.cpp:8:36: error: expected primary-expression before ';' token
    8 |             throw std::out_of_range;
      |                                    ^

범위를 벗어난 예외 개체 대신 std::out_of_range를 throw했기 때문에 오류가 발생합니다. std::out_of_range 생성자는 범위를 벗어난 예외를 생성하는 데 사용되는 유형 정의입니다.

따라서 throw 문을 사용하여 던질 수 없습니다. C++에서 범위를 벗어난 예외를 발생시키려면 std::out_of_range() 생성자에 문자열을 입력 인수로 전달하여 범위를 벗어난 예외를 생성해야 합니다. 그래야만 C++에서 범위를 벗어난 예외를 성공적으로 throw할 수 있습니다.