为什么deque的pop_front()和pop_back()不是noexcept?

16

std::dequepop_front()pop_back() 在 C++11 及以上版本中为什么不是 noexcept ?这是有特别原因还是被遗忘了?


他们怎么可能呢? - molbdnilo
1个回答

9
如果我理解正确,标准并没有在具有窄契约(先决条件违反会导致未定义行为)的函数上指定noexceptN3279和最近的P0884都在讨论这个问题,以及如何决定一个函数是否应该是noexcept或者是有条件的。

这适用于std::dequepop_frontpop_back,也适用于没有调用析构函数的frontback。例如,对于std::vectorpop_backfrontback同样适用。

2
这是正确的。这个想法是允许实现在检测到合约违规时抛出异常。如果这些函数被标记为 noexcept,程序将调用 std::terminate。 - Arnaud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接