我总是应该使用noexcept吗?

时间:2014-01-24 10:54:43

标签: c++ c++11

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

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

const std::string& getName() const noexcept{ return name; }

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

2 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:4)

如果有人需要这个noexcept限定符,我会添加它。如果你不添加它,你有更多的可能性来改变实现(记住,这是setter / getter的常用参数[并且我不是setter和getter的粉丝])。

如果你需要在“回滚,从错误中恢复”的情况下调用此函数,通常需要这种“无投掷”保证。例如,如果你想从析构函数中调用它,那么如果它提供了nothrow保证,你的生活会更容易(并且noexcept是提供这种保证的现代方式)。

所以,我不会做一般规则来添加它。