使用noexcept重写throw函数

时间:2015-05-31 12:59:56

标签: c++ exception c++11 exception-handling

我听说在C++11我们应该在方法声明后用throw替换noexcept

  

在C ++ 11中,通常应该使用noexcept。旧抛出规范已弃用。

如何在以下代码中执行此操作?

template <typename Object>
class Stack
{
public:

    Stack();

    Object & peek() throw(std::runtime_error);

};

参考link

请避免链接到对std::runtime_error

无效的问题

1 个答案:

答案 0 :(得分:0)

发现动态异常规范并没有真正有用,这就是为什么它们在C ++ 11中被弃用的原因。他们被认为有用的唯一情况是动态异常规范,即throw()。对于这种情况,引入noexcept声明作为更好的替代方案,允许编译器执行更积极的优化。 (请注意,这意味着throw()noexcept 在语义上等效,如果您知道程序仍然可以正常运行,则应该只用后者替换前者。)

在您的情况下,您没有空throw(),因此您无法将其替换为noexcept。人们普遍认为,在这种情况下,最好只删除throw(std::runtime_error)并提及函数可能会抛出std::runtime_error但文档中没有其他内容的事实,如{{3} }已经在评论中提出过。