티스토리 뷰

출력에는 여러 채널이 있다.

 

std::cout

버퍼에 담아 두었다가 출력.

 

std::cerr

버퍼를 통하지 않고 바로 출력을 한다.

 

#include<iostream>
#include<fstream>
#include<string>
#include<cmath>

using namespace std;

void last()
{
	cout << "last " << endl;
	cout << "Throws exception" << endl;
	
	throw -1;
	
	cout << "End last " << endl;
}

void thrid()
{
	cout << "thrid" << endl;
	
	last();

	cout << "End thrid" << endl;
}

void second()
{
	cout << "second" << endl;
	
	try
	{
		thrid();
	}
	catch(double)
	{
		cerr << "Second caught int exception" << endl;
	}
	
	cout << "End second" << endl;
}

void first()
{
	cout << "first" << endl;
	
	try
	{
		second();
	}
	catch(int)
	{
		cerr << "first caught int exception" << endl;
	}
	
	cout << "End First" << endl;
}

int main()
{
	try
	{
		first();
	}
	
	catch(int)
	{
		cerr << "main caught int exception" << endl;
	}
	
	return 0;
}
first
second
thrid
last
Throws exception
first caught int exception
End First

 

만일 first까지 double로 바꾸게된다면 어떻게 변할 것인가?

 

void second()
{
	cout << "second" << endl;
	
	try
	{
		thrid();
	}
	catch(double)
	{
		cerr << "Second caught int exception" << endl;
	}
	
	cout << "End second" << endl;
}

void first()
{
	cout << "first" << endl;
	
	try
	{
		second();
	}
	catch(double)
	{
		cerr << "first caught int exception" << endl;
	}
	
	cout << "End First" << endl;
}
first
second
thrid
last
Throws exception
main caught int exception

 

메인으로 넘어가 출력하게 된다.

 

	catch(...) // catch-all handlers
	{
		// 
	}

 

이런식으로 작성하게 되면 모든 자료형을 받을 수 있는 catch가 완성된다.

 

 

이런식으로 throw의 자료형을 정할 수 있음.

 

만일 ( )을 비우게 되면 "예외를 안던지겠다"라는 선언이 되니 조심해야한다.

 

보통은 잘 사용하지 않는다고 한다.

void last() throw(...)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함