C++ 11(和C++ 14)STL容器具有noexcept析构函数和clear()成员函数.
这意味着元素也应该具有noexcept析构函数,或者至少存储在容器中的实际元素在销毁时不应抛出任何异常 - 或者更准确地说,相应的allocator_traits<Allocator>::destroy调用不应抛出.
这是否在标准的任何地方指定为要求(明确或暗示另一个明确要求)?如果没有,为什么?
我知道is_nothrow_constructible需要一个noexcept析构函数,但is_constructible单独没有,并且容器需求是根据概念而不是类型特征模板指定的.
17.6.4.8/1在某些情况下(替换函数,处理函数,用于实例化标准库模板组件的类型的操作),C++标准库依赖于C++程序提供的组件.如果这些组件不符合要求,则标准对实施没有要求.
17.6.4.8/2特别是,在下列情况下,效果未定义:
...
- 如果任何替换函数或处理函数或析构函数操作通过异常退出,除非在适用的必需行为:段落中明确允许.
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |