引用自:《More Effective C++》
第一、异常对象在传递时总被进行拷贝;当通过传值方式捕获时,异常对象被拷贝了两次。对象做为参数传递给函数时不一定需要被拷贝。
注:异常对象抛出时一定会进行一次拷贝,捕获时使用引用传递就不需要拷贝了。作为参数被传递给函数时,函数处可能是引用参数,就不需要复制对象。
第二、对象做为异常被抛出与做为参数传递给函数相比,前者类型转换比后者要少(前者只有两种转换形式)。
注:前者智能转换继承类为基类、指针到空指针;后者可以各种隐式转换。
第三、catch 子句进行异常类型匹配的顺序是它们在源代码中出现的顺序,第一个类型匹配成功的 catch 将被用来执行。当一个对象调用一个虚拟函数时,被选择的函数位于与对象类型匹配最佳的类里,即使该类不是在源代码的最前头。