본문 바로가기

Language/C++

try~catch문


예외처리를 하는 try~catch문은 if~else 문보다 효율적으로 예외처리를 한다.

예외 처리(Exception Handling)

 try{
  //code
 }
 catch(t){/*code*/}
/* try 불록을 끝내고 t 타입에 해당되는 예외상황을 처리한다. catch 다음 코드는 t에 의해 보고된 예외상황을
 처리할 수 있는 적당한 작업을 수행해야 한다.*/

try문 내부에 예외가 발생하지 않았을때 실행할 코드를 넣는다. 만일 try문에 예외가 발생하게 된다면 catch문으로 제어가 옮겨진다.

int main()
{

 int i = 0;

 cout << "Input : ";
 cin >> i;

 try{
  if(i == 0) throw i;
 }catch(int a){
  cout << a << "error" << endl;
  return 0;
 }

 cout << i << "Input" << endl;

 return 0;
}

이 프로그램은 0 값이 드러오면 error를 이르킨다. if 문이 i를 검사하여 0 이면 throw 문으로 예외를 던지며 이때 던져지는 i의 값을 catch문에서 받아 catch문으로 제어를 옮긴다.

catch문은 오버로딩이 되기 때문에 매개변수가 반드시 throw의 Type과 동일해야 한다.

위 코드에서

catch(double a) 만 해버리면 에러가 발생한다.

 try{
  if(i == 0) throw i;
 }catch(int a){
  cout << a << "error" << endl;
  //return 0;
 }
 catch(double a){
  cout << a << "error" << endl;
  //return 0;
 }
 catch(char a){
  cout << a << "error" << endl;
  //return 0;
 }
 catch(...){
  cout << "error" << endl;
  //return 0;
 }

catch(...)은 esle 과 동일하다 catch문에서 해당되는게 없다면 catch(...) 로 제어가 이동한다.