【发布时间】:2018-10-22 21:56:31
【问题描述】:
我们有一个实现 IUnknown 的类(或我们不拥有的任何接口)。我们开始用 noexcept 标记我们的大多数/所有方法,以进行任何潜在的优化,因为无论如何我们都不会抛出任何异常;尽管我们可能依赖的一些库。有人提出了是否应该将 QueryInterface/AddRef/Release 标记为 noexcept 的问题,因为接口不是。
当只有部分派生类被标记为 noexcept 时,是否有任何副作用或陷阱?
【问题讨论】:
-
请注意
noexcept不是免费的。把它放在所有功能上并不是一个好主意。代价是一旦戴上它就无法真正移除它。其他noexcept代码可能依赖于您的函数的noexcept,因此为了向后兼容,您会被卡住。这意味着您永远无法将实现更改为可能抛出的东西。添加noexcept是一条单向街道,可以安全添加(如果正确),但删除不安全。您必须确保该函数本质上永远不会抛出。
标签: c++ inheritance polymorphism noexcept