【问题标题】:Why are deque's pop_front() and pop_back() not noexcept?为什么 deque 的 pop_front() 和 pop_back() 不是 noexcept?
【发布时间】:2019-04-23 23:48:48
【问题描述】:

在 C++11 及更高版本中,std::dequepop_front()pop_back() 不是 noexcept 是否有任何原因,或者只是被遗忘了?

【问题讨论】:

  • 他们怎么会这样?

标签: c++ c++11 deque c++-standard-library noexcept


【解决方案1】:

如果我理解正确,该标准没有在具有狭义合同的函数上指定noexcept(前提是违反会导致 UB)。 N3279 和最近的 P0884 正在讨论这个问题以及如何决定一个函数是否应该是 noexcept(或有条件地)。

std::dequepop_frontpop_back 也是如此,frontback 也没有调用析构函数。例如,std::vectorpop_backfrontback 也是如此。

【讨论】:

  • 这是正确的。这个想法是允许实现在检测到违反合同时抛出异常。如果这些函数被标记为 noexcept,程序将调用 std::terminate。
猜你喜欢
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2018-07-11
  • 2020-09-10
相关资源
最近更新 更多