try, catch 및 throw 문을 (c, + +)
C + + 예외 try, catch 및 throw 키워드입니다.
오류 또는 예외 상황이 신호를 throw 하는 식입니다.모든 형식의 개체를 throw 하는 식의 피연산자로 사용할 수 있습니다.일반적으로이 개체를 사용 하는 오류에 대 한 정보를 전달 합니다.일반적으로 std::exception 클래스 또는 표준 라이브러리에 정의 된 파생된 클래스 중 하나를 사용 하거나 이러한 적절 하 게 없는 경우 std::exception에서 사용자 지정 예외 클래스를 파생 해야 합니다.
Try 블록에서 예외가 throw 될 수 있습니다 하나 이상의 문이 포함 됩니다.
하나 이상의 catch 블록이 try 블록 바로 뒤에 있습니다.각 catch 블록을 처리할 수 있는 예외 형식을 지정 합니다.
다음 구문 예를 들면 try 블록 및 해당 처리기입니다.GetNetworkResource() 획득 데이터 네트워크를 통해 연결, 및 두 개의 예외 형식에서 파생 되는 사용자 정의 클래스는 std::exception 예외 catch 문에 참조로 전달 되는 참고:
MyData md;
try {
// code that could throw an exception
md = GetNetworkResource();
}
catch (networkIOException& e) {
// code that executes when an exception of type
// networkIOException is thrown in the try block
//…
// Log error message in the exception object.
cerr << e.what();
}
catch (myDataFormatException& e) {
// code that handles another exception type
//…
cerr << e.what();
}
// The following syntax shows a throw expression:
MyData GetNetworkResource()
{
//...
if(IOSuccess == false)
throw networkIOException("Unable to connect");
//...
if(readError)
throw myDataFormatException("Format error");
// ...
}
설명
코드 뒤에 try 절에 보호 된 섹션의 코드입니다.Throw 식 (발생)를 throw 합니다. 예외가 있습니다.코드 블록 뒤에 catch 절 예외 처리기가 고 (핸들) 형식을 throw 및 catch 식에서 호환 되는 경우 throw 식에 의해 throw 되는 예외를 catch 합니다.목록에 적용 되는 규칙에 대해서는 catch 블록에서 형식 일치 _____ 참조 하십시오.줄임표 catch 문을 지정 하는 경우 (...) 종류를 대신의 catch 블록 처리 모든 종류의 예외를 C 예외 및 메모리 보호와 같은 시스템 또는 응용 프로그램 생성 된 예외를 포함 하 여, 0 및 부동 소수점 위반으로 나눕니다.Catch 블록 주문 프로그램 처리기가 시도 됩니다에 대 한 마지막 처리기 여야 합니다 때문에 해당 try 블록입니다.Catch (...)에 주의 하 여 사용 합니다. 일반적으로 catch 블록 오류를 기록 하 고 프로그램 실행을 중지 하기 전에 모든 특별 한 정리 작업을 수행할 수 있습니다.Catch 블록이 발견 되는 특정 예외를 처리 하는 방법을 알고 하지 않는 한 계속 하는 프로그램을 허용 하지 않습니다.
A throw 식 현재 처리 중인 예외 없음 피연산자와 위.이러한 식에만 나타나야 합니다는 catch 처리기 또는 내에서 호출 되는 함수에서는 catch 처리기.다시 throw 된 예외 개체 (않는 복사) 원본 예외 개체가입니다.예를 들면 다음과 같습니다.
try {
throw CSomeOtherException();
}
catch(...) { // Catch all exceptions – dangerous!!!
// Respond (perhaps only partially) to exception
throw; // Pass exception to some other handler
}