c++ primer plus 第15章友,异常和其他 15.3.10 异常何时会迷失方向
15.3.10 异常何时会迷失方向
15.3.10 异常何时会迷失方向
异常被引发后,在两种情况下,会导致问题。首先,如果它是在带异常规范的函数中引发的,则必须与规范列表中的某种异常匹配(在继承层次结构中,类类型与这个类及其派生类的对象匹配),否则称为意外异常(unexpected exception)。在默认情况下,这将导致程序异常终止(虽然 C++11摒弃了异常规范,但仍支持它,且有些现有的代码使用了它)。如果异常不是在函数中引发的(或者函数没有异常规范),则必须捕获它。如果没被捕获(在没有ty块或没有匹配的 catch块时,将出现这种情况),则异常被称为未捕获异常(umcaughtcxccption)。在默认情况下,这将导致程序异常终止。然而,可以修改程序对意外异常和未捕获异常的反应。下面来看如何修改,先从未捕获异常开始。
未捕获异常不会导致程序立刻异常终止。相反,程序将首先调用函数temminate()。在默认情况下,terminate()调用 abort()函数。可以指定 terminate()应调用的函数(而不是 abort())来修改 terminate( )的这种行为。为此,可调用 set_terminate()函数。set_terminate()和terminate()都是在头文件 exception 中声明的:
typedef void (*terminate handler)();
terminate_handler set_terminate(terminate_handler f)throw();//C++98
terminate_handler set_terminate (terminate_handler f)noexcept; //C++11
void terminate();// C++98
void terminate()