std::expected 应该是 [[nodiscard]] 吗?

主要观点:

  • 作者的通讯员在新代码中从throw/catch异常切换到 C++23 的std::expected,展示了两种使用方式及区别。
  • 强调不应在未检查错误的情况下丢弃f_or_error()的返回值,可通过标记[[nodiscard]]让编译器诊断错误。
  • 指出在传统异常处理和expected处理中,“丢弃两者”有不同的表示方式,且expected应标记[[nodiscard]]
  • 列举了不同库中expected的标记情况,如 LLVM/Clang 的llvm::Expected已标记,libc++的std::expected添加标记后部分测试失败等。
  • 介绍了expected添加[[nodiscard]]后的 adoption 情况,如 Martin Moene、Stephan T. Lavavej 等的相关动作。
  • 认为 STL 供应商应给expected添加[[nodiscard]],并探讨了其他类型如optionalvarianterror_code是否应标记。

关键信息:

  • std::expected的两种使用方式及与传统异常处理的对比。
  • [[nodiscard]]的作用及对代码错误的诊断。
  • 不同库中expected的标记现状及相关测试结果。
  • expected添加[[nodiscard]]后的 adoption 过程。
  • 关于其他类型是否应标记[[nodiscard]]的讨论。

重要细节:

  • 传统 C++程序中throw/catch的示例及错误处理方式。
  • expected在不同情况下的转换和处理逻辑。
  • 各库中expected标记[[nodiscard]]的具体情况及相关测试。
  • 不同函数处理expected返回值的正确和错误方式。
  • 不同类型如optionalvarianterror_codeexpected在标记[[nodiscard]]上的差异。
阅读 10
0 条评论