Rae*_*ald 4 c++ priority-queue c++-standard-library noexcept
该pop()方法std::priority_queue不宣noexcept,所以理论上可以抛出一个异常.但什么时候可能会抛出异常,那些异常会是什么?
它可以被标记nothrow,但不是.
std::priority_queue::pop会*不丢Run Code Online (Sandbox Code Playgroud)void pop();从优先级队列中删除顶部元素.有效地打电话
Run Code Online (Sandbox Code Playgroud)std::pop_heap(c.begin(), c.end(), comp); c.pop_back();
c默认情况下是std::vector.
Run Code Online (Sandbox Code Playgroud)void pop_back();4/复杂度:T的析构函数被称为等于被擦除元素数的次数,但T的赋值运算符被称为等于擦除元素之后的向量中元素数的次数.
5/抛出:除非T的赋值运算符或移动赋值运算符抛出异常,否则无效.
*所以只有析构函数T被调用,而且因为它而不能抛出
[requirements.on.functions]/2.42 /特别是,在以下情况下,效果未定义:
[...]
2.4/如果任何替换函数或处理函数或析构函数通过异常退出,除非在适用的必需行为:段落中明确允许.
std::priority_queue::pop不nothrow呢?由于抛出的异常T::~T会导致UB,因此实现可以假设它不会发生并且仍然符合标准.另一种处理它的方法是让这些库函数nothrow(false)而不是处理它.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |