13.9 异常指定
优质
小牛编辑
141浏览
2023-12-01
异常指定可以由指定函数抛出一列异常:
int g( float h ) throw (a, b, c)
{
// function body
}
可以限制从函数抛出的异常类型。函数声明中可以指定异常类型作为异常指定(也称为抛出表,throw list)。异常指定列出可抛出的异常。函数可以抛出指定异常或派生类型。尽管这样好像保证不会抛出其他异常类型,但其实也可以抛出其他异常类型。如果抛出异常指定中没有列出的异常,则调用函数 unexpected。
将 throw(即空异常指定)放在函数的参数表之后表示该函数不抛出任何异常。但这种函数仍然可以抛出异常,这时也调用函数 unexpected。
常见编程错误13.11
如果抛出函数异常指定中没有的异常,则调用函数unexpcted不带异常指定的函数可以抛出任何异常:
void g(); // this function can throw any exception
unexpected 函数的含义可以调用函数 set_unexpected 重新定义。
异常处理的一个有趣方面是函数在 throw 表达式中包含函数异常指定中未列出的异常时,编译器不产生语法错误。函数在执行时抛出这个异常之后才会捕获错误。
如果函数抛出特定类的类型的异常,则函数也可以抛出用 public 继承从该类派生的所有类异常。