【发布时间】:2015-08-28 23:27:02
【问题描述】:
C++11 §23.2.1.10 规定:
除非另有说明,否则定义的所有容器类型 在本条款中满足以下附加要求:
- 如果 insert() 或 emplace() 函数在插入单个元素时引发异常,则该函数无效。
- 没有 erase() 、 clear() 、 pop_back() 或 pop_front() 函数会引发异常。
关于第一个要点,容器如何保证这一点?
T 的构造函数可能有副作用。应该不是“对容器没有影响”
关于第二个要点,这通常调用allocator::deallocate(T*,size_t),而不是noexcept。为什么要掩盖最终的异常?
【问题讨论】:
-
这些问题在
std-discussion上不是更好吗? -
deallocate()要求不抛出异常。 -
在分配器需求表([allocator.requirements])中查找
deallocate -
(也叫@LightnessRacesinOrbit):也许有人能想到一个更好的标题……
-
标准中有很多地方在说“无影响”时并不完全意味着“在任何地方都没有影响”。例如,
uninitialized_meow函数。
标签: c++ c++11 language-lawyer