【问题标题】:Why is C++ std::optional::operator*() not declared as noexcept?为什么 C++ std::optional::operator*() 没有声明为 noexcept?
【发布时间】:2021-01-02 22:02:31
【问题描述】:

在我的代码上运行静态分析器时,我遇到了 std::optional::operator*() 没有被声明为 noexcept。在我看来,操作员没有充分的理由抛出,因为人们希望在获取其值之前验证可选项是否已启用。

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

【问题讨论】:

    标签: c++ stl c++17


    【解决方案1】:

    找到了为什么不使用 noexcept 的理由,埋在 std::optional 提案 n3672 中:

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2016-05-28
      • 1970-01-01
      • 2019-09-07
      • 2010-11-09
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多