gpt4 book ai didi

c++ - "Thou shalt not throw"和 noexcept

转载 作者:IT老高 更新时间:2023-10-28 22:13:45 27 4
gpt4 key购买 nike

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

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

最佳答案

要求:你不能扔”的意思就是你猜的:如果你扔,你会得到未定义的行为。

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

Any of the functions defined in the C++ standard library can report a failure by throwing an exception of a type described in its Throws: paragraph. An implementation may strengthen the exception specification for a non-virtual function by adding a non-throwing noexcept-specification.

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

关于c++ - "Thou shalt not throw"和 noexcept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com