主要观点:
- 作者的通讯员在新代码中从
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]],并探讨了其他类型如optional、variant和error_code是否应标记。
关键信息:
std::expected的两种使用方式及与传统异常处理的对比。[[nodiscard]]的作用及对代码错误的诊断。- 不同库中
expected的标记现状及相关测试结果。 expected添加[[nodiscard]]后的 adoption 过程。- 关于其他类型是否应标记
[[nodiscard]]的讨论。
重要细节:
- 传统 C++程序中
throw/catch的示例及错误处理方式。 expected在不同情况下的转换和处理逻辑。- 各库中
expected标记[[nodiscard]]的具体情况及相关测试。 - 不同函数处理
expected返回值的正确和错误方式。 - 不同类型如
optional、variant、error_code与expected在标记[[nodiscard]]上的差异。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。