第三章,异常

条款15 了解异常处理(exception handling)的成本

(1)在运行时期,exceptions会做大量簿记工作。在每一个执行点,必须确认如果抛出exception要析构哪些对象,必须在try的入口点和离开点做记号。针对每一个try语句块必须记录对应的catch子句及能够处理的exceptions类型。另外异常规范的对比工作也会造成一些花销。

(2)不同的编译器使用不同的方式实现try语句块,付出的代价各不相同,但粗略估计,使用try语句块会使得代码膨胀5%~10%,执行速度也会大约下降到这个数。

(3)抛出一个exception,会对整个程序的性能带来较大的冲击。与正常的函数返回动作比较,由于抛出exception而导致的函数返回,其速度比正常情况下慢3个数量级。

建议: 异常的抛出与处理本应该的罕见的,请将try语句块与exception specifications的使用限制于非用不可的地点,并且在真正异常的情况下抛出exception;为了让exception的相关成本最小化,只要能够不支持exceptions,编译器便不支持。