<1>c++异常匹配规格是根据对象的静态类型进行匹配的c++
<2>typedef void (*f)() throw(int) typedef 语句中不能有异常规格说明ide
<3>throw;向上级抛异常函数
throw x;抛出异常spa
1.使用异常说明:对象
void foo(void) throw(MyException)/*异常说明,而且foo函数体中只能抛出异常说明中的异常*/{}//只抛出MyException异常资源
void foo(void){}//抛出任何异常it
void foo(void)throw(){}//不抛出异常io
另外:若是一个函数抛出了一个在其异常说明中未被列出的异常,那么std::unexpected()函数就会被调用。class
它的缺省行为是调用std::terminate()函数,然后者又会调用abort()函数;循环
2.异常能够嵌套
3.若是函数的声明有异常说明,那么定义也须要有异常的说明
4.构造函数能够抛出异常,并且不少场合以这种方式处理构造过程当中的错误会更简单。
可是要注意,抛异常前应该作必要的释放资源工做,由于不彻底对象的析构函数是不会被调用的。
5.不要在析构函数中抛出异常,由于抛出异常会致使对象的析构(而C语言中若是出错可能会致使某些资源不能释 放),这样可能形成析构和抛出异常之间的死循环。
若是在析构函数中有异常,应该在内部处理,不要抛出。
6.能够不处理抛出的异常,而交给上一层调用者,即向上一层继续抛出异常
7.示例:
class AppException {};
class SysException {};
throw AppException ();
throw SysException ();
try {
} catch (AppException& ex) {
ex.what();
} catch (SysException& ex) {
}
8.注意__LINE__/__FILE__在自定义异常中的应用:
throw MyExp (__FILE__, __LINE__);
9.不能抛出比基类虚函数更多的异常