"有效的现代C ++"的第14项建议在不发出异常时声明函数noexcept
。我有一个具有许多小成员函数的类,它们不能因为非常重要的原因而抛出,例如它们只对POD执行简单的数学运算。我应该声明这些函数noexcept
吗?对于我来说,即使编译器确实可以检测到没有可能抛出也似乎有点过分了。
编辑:为了澄清我的问题,this问题中给出的建议是,当明显的功能永远不会抛出时,使用它。"但是,如果该函数永远不会抛出(即使是编译器),为什么要使用noexcept
呢?请注意,我必须将我的程序的绝大部分功能标记为noexcept
,如果给出令人信服的理由,我将只会这样做。
答案 0 :(得分:1)
但是如果它显而易见(甚至对编译器来说)函数永远不会抛出,为什么要使用noexcept呢?
只有了解函数的定义才能推断出这些知识。调用者可能只包含标题,其中包含声明。没有信息。你最好的机会是链接时优化器注意到隐式noexcept
属性并删除异常处理(纯粹谈论理论上的考虑因素,不确定编译器是否实际执行此操作......)。
当然,这在某些情况下是不可能的,例如,如果您以多态方式使用对象。虽然你的实现是隐含的noexcept
,但子类的功能可能会抛出。
作为旁注,没有noexcept
,生活通常都很好,但是除非你有特殊的理由想要使用它,例如公共API,性能敏感的紧密循环,编码标准等,您可以自由地省略它。不要微观优化或浪费时间。