(假设分配器的默认构造函数不抛出)
Deque 的Boost 实现说:
如果 allocator_type 的默认构造函数抛出,则抛出
C++ 标准规定了什么?
谢谢
C++11 标准(第 23.3.3.2 段)规定:
explicit deque(const Allocator& = Allocator());
1 效果:使用指定的分配器构造一个空的双端队列。
2 复杂性:恒定。
而已。没有提到这个构造函数可能抛出或不抛出的条件,第 23 条(专用于序列容器)也没有指定任何一般的异常安全保证,构造函数本身也没有被标记为(有条件地)noexcept
。
因此,人们必须假设它可以抛出。
std::allocator
noexcept
正如它所说,s 的要求使它的构造函数shall not exit via an exception
。但是,双端队列的构造函数可以抛出,因为它不是noexcept
。