罗剑锋的 C++ 实战笔记
罗剑锋
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
35514 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 32 讲
结束语 (1讲)
罗剑锋的 C++ 实战笔记
15
15
1.0x
00:00/00:00
登录|注册

特别放送 | 和你聊聊现代C++里的“特殊容器”

variant是一种“异质”容器
optional用来表示值有效或者无效
实现面向对象编程里的“多态”特性
visit()访问器函数
get_if()以指针方式返回值
get()获取值
index()获取当前元素类型的索引
optional的使用
函数返回可能无效的值
make_optional()创建
reset()清空内容
*/->访问内部的值
value_or()获取值或返回替代值
value()获取值的引用
has_value()判断是否有效
默认状态是无效值
get()和visit()各自的优点和缺点
optional与容器和智能指针的区别
optional和variant是特殊的容器
特性
用法
注意事项
用途
用法
新增内容:Docker/Kubernetes搭建开发环境、C各标准特性介绍、C20的格式化功能、范围算法、Boost程序库精选
C++标准更新到了17/20
内容重新整理完善
课下作业
小结
可变值variant
可选值optional
GitHub项目cpp_study更新
示例代码更新和调整
人民邮电出版社将线上课程改编成纸质图书
一年多前完结
C++17标准里提供的optional和variant
《罗剑锋的C++实战笔记》
和你聊聊现代C++里的“特殊容器”

该思维导图由 AI 生成,仅供参考

你好,我是 Chrono。
《罗剑锋的 C++ 实战笔记》这门课已经完结有一年多的时间了,看到有很多同学还在留言区研究、探讨 C++ 的技术问题,我非常开心。能够为现代 C++ 在国内的推广普及做一点力所能及的贡献,对我来说,实在是一件很有意义的事情。

一个好消息

现在,还有一个好消息要告诉持续关注这门课的朋友们。年初的时候,人民邮电出版社的编辑在网上联系到了我,他们也对现代 C++ 很感兴趣,想把这个线上的课程“搬”到线下,改成纸质的实体图书。
于是,这大半年来,我就花了很多精力与出版社合作,把这门课的内容重新整理完善,改成更适合纸质图书阅读的形式。现在来看,虽然核心的内容不变,但在语言表述、示例代码、整体架构方面都做了非常大的修改,可以说是把这门课由内到外动了一个“大手术”,完全变成了另外一幅面孔另一个人。
罗剑锋的《C++ 实战笔记》已经在极客商城上线,你可以点击链接购买。
另外,这门课上线之初考虑到国内的 C++ 应用现状,使用的是 C++11/14,GCC 的版本是 5.4,而到了一年之后的今天,确实显得有点老旧了。所以借着这次出版图书的机会,我也做了一个全面的升级,C++ 标准更新到了 17/20,GCC 的版本是 7.5 和 10.3,应该可以在一两年的时间之内不会过时。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

现代C++中的特殊容器optional和variant是本文的重点内容。optional是一种轻量级的概念,用于表示函数返回的可能无效值,它可以近似看作只能容纳一个元素的特殊容器,有两种状态,“空”和“非空”,分别对应无效和有效。optional对象可以通过has_value()判断是否有效,通过value()获取值的引用,或者通过value_or()返回给定的替代值。此外,optional还可以像指针一样进行操作,如*/->访问内部的值,显式转换为bool值,或者用reset()清空内容。另外,optional也可以用工厂函数make_optional()来创建。文章还介绍了optional的使用场景和注意事项。variant是另一种特殊容器,可以容纳多种类型的值,但只能持有其中一种值。它提供了一种更加灵活的数据结构,适用于需要多种类型值的场景。文章还提到了C++标准的升级和对应的示例代码更新,以及作者对图书内容的新增和完善。整体来看,本文通过介绍特殊容器optional和variant,展示了现代C++的一些新特性和用法,对于C++开发者来说具有一定的参考价值。文章还介绍了optional和variant的使用场景和注意事项,以及C++标准的升级和对应的示例代码更新。文章还提到了作者对图书内容的新增和完善。整体来看,本文通过介绍特殊容器optional和variant,展示了现代C++的一些新特性和用法,对于C++开发者来说具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《罗剑锋的 C++ 实战笔记》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 嵇斌
    老程序员就是靠谱,又补了一篇。Modern C++的学习路上又多了本好书。和optional和variant一并,个人觉得还有个很有用的就是std::any。

    作者回复: 是的,本来想写any的,但篇幅太长了,只好砍掉,想要了解的同学可以看纸质书。

    2021-11-08
    2
    3
  • 九三
    罗老师不在360了 啊。奔着罗老师来了360。我说咋没在推推上搜到您😄

    作者回复: 抱歉啊,离开一年多了,没及时更新状态。

    2021-11-05
    2
  • Joseph
    C++语言的发展与Rust很多内在逻辑非常相似,这两个容器类Rust中很容易使用,或者说就是内在特性,说明较低层语言都会有相似的思考。

    作者回复: 还没开始了解rust,看来是英雄所见略同。

    2021-11-04
    2
  • 白花风信子
    老师留言的回复频率好高哇,几乎有问必答!点赞点赞点赞!

    作者回复: 必须的,让大家学起来有动力。

    2021-12-14
    1
  • Stephen
    爱了爱了

    作者回复: thanks

    2021-11-04
    1
  • robonix
    老师,为啥要用std::visit而不直接写成visit(v)呢

    作者回复: 用std表示强调它在标准库里,是一个习惯,看起来更友好一些。

    2022-08-29归属地:上海
  • dyun
    感觉modern c++和其他语言rust JAVA go相比可能就缺一个好用的依赖管理工具了,类似cargo gomod,也看到有一些类似工具,可官方没一个统一,这块老师有什么经验分享么,毕竟每个依赖自己去找也仅仅是个体力活

    作者回复: 这个目前还没有统一的解决方案,标准委员会也正在努力,但短期来看还是要靠自己去找,比较麻烦。

    2021-12-27
  • lunar
    太值了,竟然还有更新🤭

    作者回复: 有机会有时间就会写一点。

    2021-11-04
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部