22 | 处理数据类型变化和错误:optional、variant、expected和Herbception
该思维导图由 AI 生成,仅供参考
optional
- 深入了解
- 翻译
- 解释
- 总结
C++17引入了optional、variant和expected三个模板,它们分别用于处理返回值可能为空、多种类型对象和异常处理。optional代表一个“也许有效”“可选”的对象,可以避免空指针带来的问题。文章介绍了optional的构造方法、标准库支持的操作以及高阶函数lift_optional的使用方法。此外,还介绍了variant和expected的使用方法和特点。其中,Herbception提出了一种基本兼容当前C++异常处理方式的错误处理方式,被戏称为Herbception。虽然语法上基本是使用异常的样子,但Herb的方案却没有异常的不确定开销,性能和使用expected相仿。总的来说,本文介绍了C++17引入的optional模板以及其他相关模板的基本概念和使用方法,为读者提供了对这些模板的快速了解和应用指导。文章内容涵盖了这些模板的基本概念、使用方法以及与异常处理的比较,为读者提供了对这些模板的快速了解和应用指导。
《现代 C++ 编程实战》,新⼈⾸单¥59
全部留言(4)
- 最新
- 精选
- 廖熊猫有的语言里面没有try catch,统一使用类似optional的结局方案,比如Rust里面的Err,Haskell中对应的应该是Either类型,这些都是处理可以恢复的错误,不可恢复的直接就让程序崩了。 lift_optional让我想起来被Haskell支配的恐惧 (Just (+) ) <*> Just 41 <*> Just 1 不知道老师后面会不会讲到monad😂
作者回复: optional 对应的是 Maybe 吧。expected 比较像 Either。 不会讲 monad。这个即使专门讲函数式编程也要比较后面呢。
2020-01-152 - tt老师,听了您的课后,觉得现在C++标准提案有很多都是利用C++的语义和语法来写提升编程便利性的模板,是这样么? 还有,一直不知道C++的异常是怎么实现的,还有这里说的异常处理的性能问题,有推荐的比较好阅读的参考文献么?
作者回复: 是的。提高开发的友好程度,尤其是对新手的友好程度,一直是 C++ 委员会的目标。你应该发现虽然语言越来越复杂,但很多东西却越来越好写了。 异常的实现非常复杂。想了解的话需要花点力气。不过我倒是查到有篇还不错的中文文章,推荐一看: http://baiy.cn/doc/cpp/inside_exception.htm
2020-01-1522 - Geek_7d9f3bC++中是否有关闭异常的方式,实践中经常遇到分配内存时出现了bad_alloc直接让程序terminate掉了,涉及的历史代码又非常多,一个个try catch(...)既耗时又会造成程序性能的下降…
作者回复: 标准里没有。而且,能关闭异常的编译器,在标准库里碰到内存不足程序一样挂。 关于这个问题的详细讨论,可以参见: https://zhuanlan.zhihu.com/p/617088259
2023-09-17归属地:广东2 - ×22感觉optional就和rust里面的Option<>一样?
作者回复: 应该是吧。但我对Rust不熟。
2022-09-27归属地:江苏