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

Why std::map find() is not declared as noexcept?

本文关键字:声明 noexcept std map find 为什么      更新时间:2023-10-16

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

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

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

find()基于映射的Compare()方法,该方法可能引发异常(想象一下复杂键可能不正确的情况)。因此,我们不能确定find()不会引发异常。