我是否应该总是在C ++ 11中为getter使用noexcept方法修饰符?
我的意思是简单的吸气者,这只是回归成员。 至少在我所有的吸气剂中,我有一个例外是不可能的 被抛出一个缺点是吸气剂过于冗长:
const std::string& getName() const noexcept{ return name; }
Stroustrup的书中指出的好处是编译器 可能会在这里和那里做一些优化。
答案 0 :(得分:28)
noexcept
是一个很难收回的承诺。例如,您可以稍后执行一些简单的操作,例如将返回类型更改为std::string
(无论出于何种原因),但由于需要分配字符串的副本,因此可以抛出。
因此,标准采用“仅在必要或非常有益的情况下添加noexcept
”的方式,我认为这是一个很好的规则。你需要问自己的问题是,这种方法的调用者是否需要它不抛出?
答案 1 :(得分:4)
如果有人需要这个noexcept限定符,我会添加它。如果你不添加它,你有更多的可能性来改变实现(记住,这是setter / getter的常用参数[并且我不是setter和getter的粉丝])。
如果你需要在“回滚,从错误中恢复”的情况下调用此函数,通常需要这种“无投掷”保证。例如,如果你想从析构函数中调用它,那么如果它提供了nothrow保证,你的生活会更容易(并且noexcept是提供这种保证的现代方式)。
所以,我不会做一般规则来添加它。