예외가 발생 했음을 알리는 문장의 구성에 사용된다.
try 문에서 발생한 오류에 대한 정보를 전달.
#include <iostream>
using std::cout, std::endl;
double divide(double d, double v) {
if (v == 0)
throw "Divide by zero";
return d / v;
}
void terminateFunc() {
cout << "Terminated" << endl;
exit(123);
}
int main(){
std::set_terminate(terminateFunc);
std::terminate();
cout << divide(10, 0) << endl;
}
Terminated (코드: 123개)
try {
실행문
}
catch(... or throw의 자료형){
실행문
}
catch(...)은 throw의 반환 값과 상관 없이 실행된다.
throw의 자료형과 일치하지 않을 시 catch가 진행되지 않는다.
double divide(double d, double v) {
if (v == 0)
throw "Divide by zero";
return d / v;
}
int main(){
try {
cout << divide(10, 0) << endl;
}
catch (const char* e) {
cout << e << endl;
}
Divide by zero
throw 0;
catch(...){
cout << "Error" << endl;
}
Error
클래스를 throw하고 catch할 수 있으며 catch는 가장 먼저 실행된 문이 1번만 실행된다.
선언된 자동 지역 변수들은 삭제 및 초기화가 이뤄짐
ex)
throw Child();
catch(Parent){
cout << "parent" << endl;
}
catch(Child){
cout << "child" << endl;
}
parent
#include <stdexcept>
int main(){
std::logic_error e;
std::runtime_error q;
std::out_of_range o;
}
logicerror: 논리적 사전 조건 위반과 같이 프로그램이 실행되기 전에 검색될 수 있는 오류를 보고하기 위해 발생하는 모든 예외에 대한 기본 클래스
runtime_error: 프로그램이 실행되는 경우에만 검색될 수 있는 오류를 보고하기 위해 발생하는 모든 예외에 대한 기본 클래스
out_of_range: __유효 범위를 벗어난 인수를 보고하기 위해 발생하는 모든 예외에 대한 기본 클래스
그 밖의 정보
https://learn.microsoft.com/ko-kr/cpp/standard-library/stdexcept?view=msvc-170