C++11 §23.2.1.10 规定:
除非有特别指定,否则本条款中定义的所有容器类型均满足以下附加要求:
- 如果向容器插入单个元素时 insert() 或 emplace() 函数引发异常,则该函数不会产生任何影响。
- no erase()、clear()、pop_back() 或 pop_front() 函数会引发异常。
关于第一个要点,容器如何保证这一点?T
的构造函数可能具有副作用。难道不应该是“对容器没有影响”吗?
关于第二个要点,这通常会调用不是 noexcept
的 allocator::deallocate(T*,size_t)
。为什么应该掩盖掉潜在的异常呢?
std-discussion
讨论区不是更合适吗? - Lightness Races in Orbitdeallocate()
必须保证不会抛出异常。 - T.C.