C++ 예외 처리 - try catch

진경천·2023년 10월 30일
0

C++

목록 보기
64/90

throw

예외가 발생 했음을 알리는 문장의 구성에 사용된다.
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

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

stdexcept

#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

profile
어중이떠중이

0개의 댓글

관련 채용 정보