Effective Modern C++ noexcept

我们知道关于函数发射异常这件事,真正重要的信息是他会不会发射异常。在C++11中,无条件的为函数声明noexcept就是为了不会发射异常的函数而准备的。函数是否要加上如此声明,事关接口的设计。当我们知道函数不会发射异常但却没有为函数加上noexcept,这就是接口规格设计存在缺陷。

为不会发射异常的函数加上noexcept,可以让编译器生成更好的代码(也就是说对代码会进行优化)。在带有noexcept声明的函数中,优化器不需要在异常传出函数的前提下,将执行期栈保持在可开解的状态,也不需要在异常逸出函数的前提下,保证所有其中的对象以其被构造顺序的逆序完成析构。

noexcept性质对于移动操作,swap,内存释放函数和析构函数最有价值。大多数函数都是异常中立的,不具备noexcept。

发布了78 篇原创文章 · 获赞 11 · 访问量 5082

猜你喜欢

转载自blog.csdn.net/qq_43145594/article/details/104206994