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
作为符合性的扩展。他们是允许的,但不是必须这样做。