1. 异常的特点
- 异常有额外开销
只要启用异常,不管是否运行到异常代码,编译出来的二进制文件都会变得很大
C++的性能优化通常是针对正常分支的,因此当异常抛出时,性能会有较大的影响。
- 异常可以大大增强代码的可读性
2. 不使用异常而使用错误码返回错误时存在的问题
需要将错误码逐层上报,直到错误处理层
需要大量类似下面的代码
if (ec != SUCCESS) return ec;
...
return SUCCESS;
- 需要预先定义错误码
3. 怎样使用异常反馈错误
- 在出错的地方throw error
可以不用提前定义错误类型,使用一个已有的错误类型和描述错误的字符串
- 可以没有try ... catch ...
4. 异常的好处
- 错误都在catch部分集中处理,其中部分只要做到异常安全即可
- 无需手动逐层传递异常
- 如果没有捕获异常,程序会挂掉。异常不会被忽略,易于调试。
- 异常是唯一可以在构造函数和operator重载中表达错误的方式
- 可以用继承方式实现异常,有层次结构
- 无需预定义所有错误类型
- 详细的错误信息可以包含在错误对象中,被catch提取
- 代码更简洁、易读、易调度
5. 异常的缺点
- 只要启用异常,binary就会膨胀
- 异常路径上性能差。因此经常发生的错误不应使用异常,而是使用错误码。
- 错误处理不明显。
- 模板代码要求能用,就只能使用异常。