为什么std :: map find()没有被声明为noexcept?

时间:2016-01-06 16:52:38

标签: c++ dictionary noexcept exception-specification

C ++ 14标准定义了std::map的find()成员函数,如下所示:

iterator find(const key_type& x);
const_iterator find(const key_type& x) const;

为什么这些功能未定义为noexcept?内部可能出错的地方,需要抛出异常或产生未定义的行为(除了找不到元素,在这种情况下函数返回end迭代器并且无论如何都不需要抛出异常)?

1 个答案:

答案 0 :(得分:5)

find()基于地图的Compare()方法,可能会抛出异常(想象一下可能不正确的复杂密钥的情况)。因此,我们无法确定find()是否会引发异常。