即使函数不能处理被抛出的异常,它也可能想要在随抛出异常退出之前执行一些动作。除了为每个可能的异常提供特定catch子句之外,因为不能指定被抛出的所有异常,所以可以使用捕获所有异常catch子句(catch-all)的。捕获所有异常的catch子句形式为(...)。例如:
// matches any exception that might be thrown
catch(...){
// place our code here
}
捕获所有异常的catch子句与任意类型的异常都匹配。
catch(...)经常与重新抛出表达式结合使用,catch完成可做的所有局部工作,然后重新抛出异常:
void mainp() {
try{
//actions that cause an exception to be thrown
}
catch(...) {
//work to partially handle the exception
throw;
}
}
catch(...)子句可以单独使用,也可以用在几个catch子句中间。
注:如果catch(...)与其他catch子句结合使用,它必须是最后一个,否则,任何跟在它后面的catch子句都将不能匹配。