1、异常处理分为两个部分:抛出异常和捕获异常。
2、抛出异常,类似于方法返回值,离开了作用域,局部对象销毁,因此需要有一个临时对象保存结果。C++特别强调,抛出一个异常,必定要一个临时对象接收,存在copy构造,这是不可避免的,因为抛出的异常已经离开了作用域,失去了控制权。
3、捕获异常,类似于调用方法,将临时对象传递给catch中的局部对象,为了避免再次copy构造,catch语句应该使用引用。特别注意,内置类型的临时对象是不可修改的,也就是说,内置类型的临时对象不能赋值给non-const引用,但是异常对象是可以的,catch语句可以是non-const引用。
4、捕获异常与调用方法的区别:
a、捕获异常是最先匹配,调用方法是最有匹配。
b、调用方法存在隐式类型转换,即int可以传递给被调方法中的double形参,捕获异常是不会发生的。二者相同的是,满足里氏代换的情况,可以匹配成功。