我总是应该使用noexcept吗?

use*_*311 33 c++ c++11

我应该总是在C++ 11中为getter使用noexcept方法修饰符吗?

我的意思是简单的吸气者,只是回归成员.至少在我所有的getter中,我有一个例外是不可能抛出的.一个缺点是getter变得过于冗长:

const std::string& getName() const noexcept{ return name; }
Run Code Online (Sandbox Code Playgroud)

Stroustrup的书中指出的好处是编译器可能会在这里和那里做一些优化.

Seb*_*edl 28

noexcept是一个很难收回的承诺.例如,您可以稍后执行一些简单的操作,例如将返回类型更改为std::string(无论出于何种原因),但因为需要分配字符串的副本,所以它可以抛出.

因此,标准采用了" noexcept仅在必要或非常有益的情况下添加"的方式,我认为这是一个很好的规则.你需要问自己的问题是,这种方法的调用者是否需要它不抛出?

  • 说以后很难删除“noexcept”是正确的,因为它是公共 API 的一部分,在不破坏客户端代码的情况下很难对其进行更改。这使得使用一个改变 API 返回类型的示例*无论如何*变得非常奇怪...如果您已经能够做到这一点,为什么同时删除 `noexcept` 却很难呢?所有的赌注都已经结束了。 (2认同)