何时可以std :: vector :: pop_back抛出异常[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我很惊讶地看到标准的C ++ std::vector::pop_back() mutator不是noexcept,因此允许抛出异常。很惊讶,因为它是一个破坏类型的操作,它永远不需要分配任何资源。

什么时候练习可以抛出异常?是否允许抛出异常只是为了传播向量的最后一个元素的析构函数抛出的异常?所以std::vector持有一个正确表现的类的值,它有一个noexcept析构函数,不会抛出pop_back()的异常?

c++ exception vector pop
1个回答
2
投票

它不是noexcept,因为它是狭窄的合同。

如果你尝试pop_back一个空向量,行为是未定义的,调试模式实现可能会选择抛出异常。

由于未定义的行为,标准库调用的析构函数不得抛出。

© www.soinside.com 2019 - 2024. All rights reserved.