C++标准有时在枚举Hash要求时使用短语“禁止抛出异常”,例如在17.6.3.4中。这是否意味着符合标准的实现必须std::hash的调用运算符标记为noexcept,或者这仅意味着从哈希函子中抛出会导致未定义或实现定义的行为?

我检查了libstdc++和libc++都将std::hash的调用运算符标记为noexcept,但是我想了解这是否是必需的行为。

最佳答案

“要求:不能扔”是指您的猜测:如果扔,您将获得不确定的行为。

此外,17.6.5.12 [res.on.exception.handling]/p1还允许实现者添加noexcept规范:



libstdc++和libc++将std::hash的调用运算符标记为noexcept作为符合性的扩展。他们是允许的,但不是必须这样做。

07-28 01:26
查看更多