为什么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],库供应商可能需要使用异常来测试实现具有所有必要的前提条件检查代码在…内这些观测器函数仍然需要不抛出例外情况。

最新更新