C++--异常(Exceptions)
1.概况
异常即程序运行是发生错误。在C语言中通常用返回值来判断异常,返回值可以是bool型,用true表示无异常,false表示有异常;也可以是整形,比如HRESULT,这样可以细化异常的类别。这种做法有很多缺陷,比如调用者忘记检查返回值,异常在多级调用栈中反复处理等。于是C++提供一套异常处理机制,将检查异常和处理异常分开,甚至能从多级调用栈中直接跳转到处理异常的代码,这是C的语法无法实现的。
C++的异常机制提供了三个关键字:try、catch和throw。try用于检测异常;catch用于处理异常;throw用于抛出异常。
try
{
被检查语句
throw 异常
}
catch(异常类型)
{
进行异常处理的语句1
}
2.基本语法
在程序执行时抛出(throw)一个基本类型的异常。一旦throw,响应的catch会响应并处理异常。如下面的catch(int e)用于处理整形异常。而catch (...)用于接收所有的异常。
try
{
throw 20;
}
catch (int e)
{
cout << "Anint exception occurred. Exception Nr. " << e << endl;
}
catch (double e)
{
cout << "Andouble exception occurred. Exception Nr. " << e << endl;
}
catch(...)
{
cout << "Andefault exception occurred"<< endl;
}
3.对函数抛出异常的限制
1. 如下声明一个函数,表明该函数可以抛出各种异常。
int myfunction (
int param);
2. 如下声明一个函数,表明该函数只能抛出int类型的异常。
float myfunction (
char param)
throw (
int);
3. 如下声明一个函数,表明该函数禁止抛出异常。如果抛出异常,则编译时会有警告。
int myfunction (
int param)
throw();
4.标准异常
C++标准库STL提供了一个标准的异常类exception,在<exception>头文件中定义。
参考资料
/doc/tutorial/exceptions/
/reference/exception/exception/