gpt4 book ai didi

c++ - "noexcept"与 "Throws: nothing"

转载 作者:IT老高 更新时间:2023-10-28 22:38:19 24 4
gpt4 key购买 nike

在浏览 C++0x 工作草案的最后一次编辑时,我发现了很多

  • 删除关键字noexcept
  • 在同一位置添加文本抛出:什么都没有

反之亦然。只是一些例子:

  • 替换noexcept针对抛出:无:20.6.4 指针安全 [util.dynamic.safety] template<class T> T*undeclare_reachable(T*p);
  • 添加 noexcept :20.6.3.2。指针特征成员函数 [pointer.traits.functions]:static pointer pointer_trait<T*>::pointer_to(...) noexcept;

这里的问题:

  • 是否有一般规则/模式,我们何时会找到 noexcept vs. Throws: nothing 在标准库中?
  • 用户是否应该根据给定的规则推导出特定的行为? IE。当他们应该或不应该添加noexcept到自己的功能?

最佳答案

在马德里,我们深受 N3279 的影响。其中包括以下准则:

采用的准则

  • 不应抛出任何库析构函数。他们应使用隐式提供的(非抛出)异常规范。

  • LWG 同意不能抛出的具有广泛契约(Contract)的每个库函数都应无条件标记为 noexcept。

  • 如果库交换函数、移动构造函数或移动赋值运算符是有条件的(即可以通过应用 noexcept 运算符证明不会抛出),则应将其标记为有条件的 noexcept。任何其他函数都不应使用有条件的 noexcept 规范。

  • 为与“C”代码(例如原子工具)兼容而设计的库函数可以无条件标记为 noexcept。

我不会将这些准则解释为必然针对更广泛的受众。这主要是承认我们确实对添加 noexcept 存在向后兼容性问题。如果我们弄错了,在下一个标准中添加 noexcept 比删除更容易。所以我们尝试了一个既保守又系统的 noexcept 应用。

关于c++ - "noexcept"与 "Throws: nothing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756304/

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