我应该对明显不能抛出异常的简单函数使用 noexcept 吗? [复制]

2024-02-12

《Effective Modern C++》第 14 条建议声明函数noexcept每当他们不发出异常时。我有一个包含许多小成员函数的类,这些函数由于非常微不足道的原因而无法抛出,例如他们只对 POD 执行简单的数学运算。我应该声明这样的函数吗noexcept?当编译器肯定可以检测到不存在抛出的可能性时,这对我来说似乎有点矫枉过正。

编辑:为了稍微澄清我的问题,给出的建议this https://stackoverflow.com/questions/10787766/when-should-i-really-use-noexcept问题是“当很明显该函数永远不会抛出时使用它”。但是,如果很明显(甚至对编译器来说)该函数永远不会抛出异常,为什么要使用noexcept根本吗?请注意,我必须将程序中的绝大多数函数标记为noexcept,只有在有令人信服的理由的情况下我才会这样做。


但是,如果显而易见的(即使对编译器)永远不会投掷,为什么还要完全使用Noexcept呢?

知识只能通过了解定义的函数。呼叫者可能只包括包含的标题宣言。那里没有信息。您最好的机会是链接时间优化器注意隐式noexcept属性并删除异常处理(纯粹谈论理论上的考虑,不确定编译器是否真的这样做......)。

当然,这在某些情况下是不可能的,例如,如果您以多态方式使用对象。虽然你的实现是隐式的noexcept,子类的函数很可能会抛出异常。

顺便说一句,生活通常是美好而花花公子的,没有noexcept,所以除非您有特定原因想要使用它,例如公共 API、性能敏感的紧密循环、编码标准等。您可以随意省略它。不要进行微观优化或浪费时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该对明显不能抛出异常的简单函数使用 noexcept 吗? [复制] 的相关文章

随机推荐