主要观点:
- 作者的通讯员在新代码中从
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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。