我听说在C++11
我们应该在方法声明后用throw
替换noexcept
:
在C ++ 11中,通常应该使用noexcept。旧抛出规范已弃用。
如何在以下代码中执行此操作?
template <typename Object>
class Stack
{
public:
Stack();
Object & peek() throw(std::runtime_error);
};
参考link
请避免链接到对std::runtime_error
答案 0 :(得分:0)
发现动态异常规范并没有真正有用,这就是为什么它们在C ++ 11中被弃用的原因。他们被认为有用的唯一情况是空动态异常规范,即throw()
。对于这种情况,引入noexcept
声明作为更好的替代方案,允许编译器执行更积极的优化。 (请注意,这意味着throw()
和noexcept
不在语义上等效,如果您知道程序仍然可以正常运行,则应该只用后者替换前者。)
在您的情况下,您没有空throw()
,因此您无法将其替换为noexcept
。人们普遍认为,在这种情况下,最好只删除throw(std::runtime_error)
并提及函数可能会抛出std::runtime_error
但文档中没有其他内容的事实,如{{3} }已经在评论中提出过。