问题描述
在我的代码上运行静态分析器时,遇到了std :: optional :: operator *()没有声明为noexcept的情况。在我看来,没有足够的理由让操作员抛出异常,因为期望操作员在获取可选值之前先验证是否使用了该可选项。
有人能澄清为什么做出这个决定吗?
解决方法
找到理由,为什么不使用noexcept,埋在std ::可选建议n3672中:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3672.html
访问包含值的观察者-运算符*和 运算符-> —即使它们具有,也不会声明为noexcept(true) 没有充分的理由抛出。这是因为它们施加了先决条件 该可选对象应被使用,并根据 N3248 [6],图书馆供应商可能需要使用异常来测试是否 实现具有所有必要的前提条件检查代码 内。仍然要求这些观察者函数不要抛出 例外。