为什么C ++ std :: optional :: operator *不声明为noexcept?

问题描述

在我的代码上运行静态分析器时,遇到了std :: optional :: operator *()没有声明为noexcept的情况。在我看来,没有足够的理由让操作员抛出异常,因为期望操作员在获取可选值之前先验证是否使用了该可选项。

有人能澄清为什么做出这个决定吗?

解决方法

找到理由,为什么不使用noexcept,埋在std ::可选建议n3672中:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3672.html

访问包含值的观察者-运算符*和 运算符-> —即使它们具有,也不会声明为noexcept(true) 没有充分的理由抛出。这是因为它们施加了先决条件 该可选对象应被使用,并根据 N3248 [6],图书馆供应商可能需要使用异常来测试是否 实现具有所有必要的前提条件检查代码 内。仍然要求这些观察者函数不要抛出 例外。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...