在查看最新的C++0x工作草案时,我发现很多内容:
- 关键词
noexcept
被删除了 - 在同一位置添加文本Throws:nothing
反之亦然。以下是一些例子:
- 将
noexcept
替换为Throws:nothing: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;
问题如下:
- 在Std-Lib中,是否存在一个通用规则/模式来区分
noexcept
和Throws:nothing? - 用户是否应该根据此规则推导出特定行为?即他们何时应该或不应该在自己的函数中添加
noexcept
?
noexcept
?”N3279 是一个很好的入门点。你还有其他建议吗?例如,目前我建议用户代码中的swap
应该是noexcept
的,并计划遵循关于move-assign等的文献。用户是否需要标记为noexcept
?或者隐含的假设足够了吗?如果用户这样做,我们能指望编译器(某天)从中获益吗? - towi