explorer

万丈高楼平地起,勿在浮沙筑高台

0%

Effective C++ :异常的注意点

个人认为,异常会增加程序员的负担,还是像 C 那样使用返回错误、断言这些方式来捕捉错误比较简洁。 > google 编码规范不建议使用异常

使用别人的代码

我们所使用的第三方库很可能会抛出异常,那么就谨记以下原则:

  • 如果该操作不在析构/构造函数中,那么就在调用可能抛出异常的对象上使用捕获异常。
    • 这样可以尽量缩小异常的范围
  • 如果该操作存在于析构/构造函数中,就需要在捕获异常后做出对应的反应。要么停止程序,要么记录该错误后继续运行。
    • 为了提供更好的灵活性,可以将操作移动到普通成员函数中供用户调用。析构函数中再做一下检查(是否需要释放资源)即可。

自己写代码

当确认一个函数不会抛出异常时,应该使用noexcept修饰。

但是大部分情况下都不会增加这个修饰,因为并不能特别的肯定它以后不会抛出异常,如果以后要改的话,就会比较麻烦。额,主要是写起来麻烦……

目前已知的是,在类的移动构造和移动赋值函数后加入 noexecpt修饰,以保证 vector这种容器可以正常调用,以提高容器的搬移效率。

这样的好处在于: 1. 增加代码的可读性 2. 提高代码的运行效率