为什么std::map find()没有声明为noexcept
Why std::map find() is not declared as noexcept?
C++14标准定义std::map
的find()成员函数如下:
iterator find(const key_type& x);
const_iterator find(const key_type& x) const;
为什么这些函数没有定义为noexcept
?内部可能出现什么问题,需要抛出异常或产生未定义的行为(除了找不到元素之外,在这种情况下,函数返回end
迭代器,无论如何都不需要抛出异常)?
find()
基于映射的Compare()
方法,该方法可能引发异常(想象一下复杂键可能不正确的情况)。因此,我们不能确定find()
不会引发异常。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 如何声明包装器类型 X 的移动构造函数<T> noexcept 取决于is_nothrow_move_constructible<T>?
- 如何声明 noexcept 如果只有属性的成员函数是 noexcept
- 我应该声明我的异常的副本构造函数noexcept吗
- C++11,“noexcept”说明符,定义与声明
- 为什么 noexcept 说明符的作用域不在声明的方法内?
- 为什么std::map find()没有声明为noexcept
- 为什么std::vector使用move构造函数,尽管声明为noexcept(false)
- g++-4.8.1认为没有异常说明的显式声明的析构函数总是noexcept(true)
- 正在转换到C++11,其中析构函数是用noexcept隐式声明的
- 理论上而不是实践上的投掷函数应该被声明为noexcept
- 为什么STL容器中的交换成员函数没有声明为noexcept ?
- c++ noexcept声明改变了模板演绎