12 catch()和函数的区别
copy的是静态类型。
基类 &r=派生类;
throw r;//基类异常
catch(A a){
throw;}//抛出原来的异常(可能是动态类型),向外传递,
catch(A a){
throw a;}//抛出异常a,向外传递,都是类型A异常
- catch(),异常对象会被copy,再传递给catch,如果catch是by value传递参数,则异常对象被copy两次。之所以异常对象被赋值,是因为,一旦异常被抛出,就脱离了原来的作用域,就会被销毁,所以要copy一份。
- 转型动作有两个。
catch(基类 ),可以传递派生类参数。
catch(const void*),可以捕获任何指针类型
- 多个catch,按先后顺序被匹配,不是最佳匹配。
catch(基类){}
catch(派生类){}//总不会被执行