try语句块和异常处理

一般当程序的某部分检测到异常即(异常检测),出现错误无法继续执行,则会抛出异常信息,通常被专门代码来处理即(异常处理)。我们用throw表达式获取异常信息,用try语句块内含多个catch子句来处理异常代码。

首先理解try...catch...throw...的含义

try ...    catch ...   throw...

try(执行一个函数,正确则不发出错误信息,出错后发出错误信息) catch(捕获错误信息,做进一步的处理)throw(执行的那个函数,出错抛出错误信息)


catch捕获到异常后,做出处理,并不是像系统那样很暴力的终止程序。

void fun1()
{
	throw int();//抛出错误信息
}
int main()
{
	try
	{
		fun1();
	}
	catch (int &e)//捕获错误信息
	{
		cout << "Exception" << endl;
		cout << e << endl;
	}

	return 0;
}

若是catch(...) { } //则可以捕获任何异常,但是处理不了,则在交给系统强行终止并报错。

throw 表达式

程序的异常检测部分使用throw表达式来获得异常,其中表达式的类型就是抛出的异常类型,在stdexcept头文件中定义了几个常见的异常类型,如:

runtime_error(只有在运行时才能检测到问题)

range_error(运行时错误,生成的结果超出了有意义的值域范围)

overflow_error(运行时错误,计算上溢)

underflow_error(运行时错误,计算下溢)

logic_error(逻辑错误)


实例:


while(cin >> item1 >> item2)
{
	try{
		if(item1.isbn() != item2.isbn() )
			throw runtime_error("data must refer to same ISBN");
		cout << item1+item2 << endl;
	}catch(runtime_error err)
	{
		cout << err.what() << endl;
		cout << "Try again ? Enter y or n" << endl;
		char c;
		cin >> c ;
		if(!cin || c == 'n')
		break;
	}
}


你可能感兴趣的:(C++)