"noexcept"vs"投掷:什么都没有"

tow*_*owi 14 c++ exception noexcept c++11

在经历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抛出:没有在STD-库?
  • 用户是否应该根据给定规则获得特定行为?即他们应该或不应该添加noexcept自己的功能?

How*_*ant 16

在马德里,我们受到N3279的强烈影响,其中包括以下指南:

通过指南

  • 没有库析构函数应该抛出.它们应使用隐式提供的(非抛出)异常规范.

  • 每个具有广泛合同的库函数,LWG同意不能抛出,应该被标记为无条件noexcept.

  • 如果库交换函数,移动构造函数或移动赋值运算符是条件宽的(即可以通过应用noexcept运算符证明不抛出),那么它应该被标记为有条件的noexcept.没有其他函数应该使用条件noexcept规范.

  • 设计用于与"C"代码(例如原子设施)兼容的库函数可以被标记为无条件noexcept.

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