1. 异常的特点

  1. 异常有额外开销

只要启用异常,不管是否运行到异常代码,编译出来的二进制文件都会变得很大
C++的性能优化通常是针对正常分支的,因此当异常抛出时,性能会有较大的影响。

  1. 异常可以大大增强代码的可读性

2. 不使用异常而使用错误码返回错误时存在的问题

  1. 需要将错误码逐层上报,直到错误处理层

  2. 需要大量类似下面的代码

if (ec != SUCCESS) return ec;
...
return SUCCESS;
  1. 需要预先定义错误码

3. 怎样使用异常反馈错误

  1. 在出错的地方throw error

可以不用提前定义错误类型,使用一个已有的错误类型和描述错误的字符串

  1. 可以没有try ... catch ...

4. 异常的好处

  1. 错误都在catch部分集中处理,其中部分只要做到异常安全即可
  2. 无需手动逐层传递异常
  3. 如果没有捕获异常,程序会挂掉。异常不会被忽略,易于调试。
  4. 异常是唯一可以在构造函数和operator重载中表达错误的方式
  5. 可以用继承方式实现异常,有层次结构
  6. 无需预定义所有错误类型
  7. 详细的错误信息可以包含在错误对象中,被catch提取
  8. 代码更简洁、易读、易调度

5. 异常的缺点

  1. 只要启用异常,binary就会膨胀
  2. 异常路径上性能差。因此经常发生的错误不应使用异常,而是使用错误码。
  3. 错误处理不明显。
  4. 模板代码要求能用,就只能使用异常。

results matching ""

    No results matching ""