我很惊讶地看到标准的C ++ std::vector::pop_back()
增变器不是noexcept
,因此可以抛出异常。很惊讶,因为它是一种销毁类型的操作,它永远都不需要分配任何资源。
练习时会引发异常吗?是否只允许传播由向量的最后一个元素的析构函数引发的异常而引发异常?因此,std::vector
拥有行为正常的类的值,该类具有noexcept
析构函数,是否不会引发pop_back()
的异常?
答案 0 :(得分:2)
这不是什么,因为它是狭窄的合同。
如果您尝试pop_back
为空向量,则行为是不确定的,并且调试模式实现很可能会选择引发异常。
标准库调用的析构函数不得因未定义行为而抛出异常。