现代C++编程实战

现代C++编程实战 / 基于现代C++编写可维护的高性能代码

吴咏炜 前 Intel 资深软件架构师
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | C++这么难,为什么我们还要用C++?

    不可否认的是,C++ 仍然是一门非常流行且非常具有活力的语言。

  • 课前必读 | 有关术语发音及环境要求

    希望能帮助你更好地学习和实践本专栏的内容。

  • 01 | 堆、栈、RAII:C++里该如何管理资源?

    这一讲的学习路径是:先讲堆和栈,然后讨论 C++ 的特色功能 RAII。掌握这些概念,是能够熟练运用 C++ 的基础。

  • 02 | 自己动手,实现C++的智能指针

    这一讲进一步讲解,如何将 `shape_wrapper` 改造成一个完整的智能指针。

  • 03 | 右值和移动究竟解决了什么问题?

    这一讲完整讨论一下移动语义和相关的概念。

  • 04 | 容器汇编 I:比较简单的若干容器

    这一讲介绍 C++ 里面的序列容器和两个容器适配器。

  • 05 | 容器汇编 II:需要函数对象的容器

    这一讲继续讲完剩下的标准容器。

  • 06 | 异常:用还是不用,这是个问题

    这一讲讨论使用异常的理由和不使用异常的理由。

  • 07 | 迭代器和好用的新for循环

    这一讲介绍所有的迭代器类型,并介绍基于范围的 for 循环。

  • 08 | 易用性改进 I:自动类型推断和初始化

    这一讲介绍现代 C++ 引入的几个易用性改进:自动类型推断,初始化列表,及类数据成员的默认初始化。

  • 09 | 易用性改进 II:字面量、静态断言和成员函数说明符

    这一讲介绍现代 C++ 引入的另外几个易用性改进:自定义字面量、二进制字面量、数字分隔符以及静态断言等。

  • 10 | 到底应不应该返回对象?

    C++ 里已经对返回对象做了大量的优化,目前在函数里直接返回对象可以得到更可读、可组合的代码。

  • 11 | Unicode:进入多文字支持的世界

    这一讲从编码的历史谈起,讨论编程中对中文和多语言的支持,然后重点看一下 C++ 中应该如何处理这些问题。

  • 12 | 编译期多态:泛型编程和模板入门

    这一讲对模板、泛型编程和静态多态做最基本的描述,并和动态多态做一定的比较。

  • 13 | 编译期能做些什么?一个完整的计算世界

    这一讲看模板的另外一种重要用途——编译期计算,也称作“模板元编程”。

  • 14 | SFINAE:不是错误的替换失败是怎么回事?

    这一讲还是继续模板和编译期编程这个话题,讲的内容是模板里的一个特殊概念——替换失败非错。

  • 15 | constexpr:一个常态的世界

    C++ 语言里的很多改进,让我们做编译期编程变得越来越简单了。

  • 16 | 函数对象和lambda:进入函数式编程

    它们在泛型编程和函数式编程中都是重要的基础组成部分,你应该熟练掌握。

  • 17 | 函数式编程:一种越来越流行的编程范式

    这一讲会对函数式编程进行一个入门式的介绍,希望你可以对函数式编程的特点、优缺点有了一个初步的了解。

  • 18 | 应用可变模板和tuple的编译期技巧

    这一讲介绍如何使用可变模板和 tuple 来完成一些常见的功能,尤其是编译期计算。

  • 19 | thread和future:领略异步中的未来

    这一讲要介绍的一些对象的使用已经可以初步展现并发编程的困难,但更麻烦的事情还在后头呢……

  • 20 | 内存模型和atomic:理解并发的复杂性

    这一讲介绍的底层概念,是在 C++ 里写出高性能并发代码的基础。

  • 21 | 工具漫谈:编译、格式化、代码检查、排错各显身手

    用好工具,可以大大提升你的开发效率。

  • 22 | 处理数据类型变化和错误:optional、variant、expected和Herbception

    异常是推荐的 C++ 错误处理方式,不过 C++ 里有另外一些结构也很适合进行错误处理,这一讲就来讨论一下。

  • 23 | 数字计算:介绍线性代数和数值计算库

    这一讲介绍几个有用的计算库。

  • 24 | Boost:你需要的“瑞士军刀”

    这一讲介绍几个 Boost 库的功能。

  • 25 | 两个单元测试库:C++里如何进行单元测试?

    这一讲介绍两个单元测试库:一个是 Boost.Test,一个是 Catch2。

  • 26 | Easylogging++和spdlog:两个好用的日志库

    它们在功能和实现方式上有很大的不同,建议你根据自己的实际需要来进行选择。

  • 27 | C++ REST SDK:使用现代C++开发网络应用

    这一讲介绍一个支持 HTTP 协议、主要用于 RESTful 接口开发的 C++ 库。

  • 新春寄语 | 35年码龄程序员:人生漫长,走点弯路在所难免

    祝你新春快乐,在新的一年里学习顺利、工作成功。

  • 新春福利 | C++好书荐读

    希望今天的推荐能给你提供多一些的参考方向,从而进一步提升自己。

  • 28 | Concepts:如何对模板进行约束?

    concepts(概念)——一个难产了很多年才终于进入 C++ 的新功能。

  • 29 | Ranges:无迭代器的迭代和更方便的组合

    它展示了 C++ 语言的一些新的可能性,并可以产生非常紧凑的高性能代码。

  • 30 | Coroutines:协作式的交叉调度执行

    它的重要性是毋庸置疑的——尤其在生成器和异步 I/O 上。

  • 加餐 | 部分课后思考题答案合集

    希望能对你有所帮助!

  • 结束语 | 终点已达,行程还要继续

    我来唱一首歌,古老的那首歌,我轻轻地唱你慢慢地和~

  • 结课问卷获奖用户名单

    每一个声音都值得倾听,感谢你们,与我们共创内容!

  • 在线阅读:第二季回归|拿下Vim,让编程效率神器为我所用

    我给你带来了一个全新的课程,《Vim 实用技巧必知必会》,希望这门课能为你打开一个全新的效率世界。

  • 期末测试 | 对于现代C++,你掌握了多少呢?

    等你来挑战!

  • 旅程再启|那些关于C++的新认知

    希望这些新内容能帮助你在C++上再上一层楼,人人都成为C++高手。

  • 31|new和delete背后:分配函数和释放函数

    一个之前没讲、但挺有意思的话题,new和delete行为的定制。

  • 32|容器里的内存管理:分配器

    详解标准前的 SGI STL 分配器、标准的分配器、分配器特征和多态分配器。

  • 33|性能测试的正确姿势:性能、时间和优化

    了解优化对代码和测试产生的影响,正确地测试代码的性能。

  • 34|快速分配和释放内存:内存池

    充分了解内存池,知道什么情况下、该如何去实现一个内存池。

  • 35 | 发现和识别内存问题:内存调试实践

    综合运用迄今为止学到的多种知识,实践一个使用栈式上下文对内存使用进行调试的工具。

  • 36|访问对象的代理对象:视图类型

    简化代码、统一函数的接口,同时保持程序的高效执行。

  • 37|参数传递的正确方法和模板的二进制膨胀

    使用合适的引用方式,并合理使用退化,可以让我们产出既灵活又小巧的代码。

  • 38 | 折叠表达式:高效的编译期展开

    这节课讨论 C++17 提供的折叠表达式,并通过具体的例子,展示如何使用这一特性来进行编译期展开,从而简化重复的代码。

  • 39 | 如何在编译期玩转字符串?

    本讲我们讨论在编译期处理字符串的一些技巧,利用这些技巧,我们能够在编译而非执行代码时对字符串进行处理,从而把一些处理提前,消除运行期的开销。

49讲

你将获得

  • 掌握 C++ 语言现代特性
  • 领会 C++ 抽象表达精髓
  • 实践 C++ 开发惯用模式
  • 征服复杂性解决实际问题

讲师介绍


课程介绍

但你也可能听说过 C++ 的另一种评价——复杂、难学、难用。上手和熟练掌握难,应用上容易出错,被误用的可能性也很大。还有,C++ 继发布语言标准的第二版——C++11——之后,它以每三年一版的频度发布着新的语言标准,每一版都在基本保留向后兼容性的同时,提供改进和新功能。

难且迭代迅速,相信这两座大山让很多 C++ 程序员都望而生畏。可事实真的如此吗?你有没有深入思考过到底什么样的学习方式才最适合 C++?面对那么多的新功能、单词和语法规则,要记吗?哪些才是重点?记住了又怎么用呢?

针对以上这些问题,吴咏炜将结合自己过去 20 多年累积的工作经验,节选现代 C++ 的重要新特性,带你进入编程实战,手把手带你重新理解 C++。相信通过本专栏的学习,你能把 C++ 当作一种实用的语言,能用它写出抽象但自然、可维护的高性能代码,并用它去更好地解决项目中的实际问题。

具体内容上,专栏分为以下四部分:

第一部分——基础篇,讲解现代 C++ 中的最重要特性,帮助你理解基础概念;

第二部分——提高篇,讲述几个独立的专题,帮助你掌握 C++ 中的一些高级技巧;

第三部分——实战篇,讨论实际的工具和第三方库,帮助你打磨手头的兵器库;

第四部分——未来篇,讨论 C++20 中即将引入的一些新特性,帮助你培养前瞻性。

学习路径图

特别说明:

1.专栏中的内容大部分时间都会使用不超过 C++17 标准的语言特性,最后在讲到 C++20 新特性时,某些实验功能可能会要求某个特定的编译器,更多细节请参见 [课前必读]

2.专栏涉及到的都是较短的代码,因此不需要工程文件也可以编译运行。这里建议你熟悉编译器的命令行,来快速编译代码。

3.为了方便你编译,可编译的完整示例代码已经放在 GitHub 上。如果你使用 CMake,还可以用它来生成你使用的平台所需的工程文件。

4.专栏中案例+代码偏多,不建议仅通过音频学习,“文稿+音频+动手实践”为最佳学习方式。


课程目录


适合人群

具有 1~5 年工作经验的 C++ 程序员,熟悉基本编程概念和 C++ 的基本语法,包括指针、引用、异常、递归、class 等(不要求熟悉 C++11),有意愿了解更深入的 C++ 知识。不适宜完全没学过 C++ 的人(本专栏非 0 基础课程)。


特别放送

免费领取福利

限时活动推荐


订阅须知

随机推荐

秋田满满婴幼儿米粉益生菌高铁罐装米糊实际效果怎样?深度爆料评...

雅诗兰黛 补水保湿15ml点评怎么样?深度评测教你怎么选?

欧莱雅 男士洗面奶控油润泽去黑头简单易上手吗?评测教你怎么选...

兰芝洗面奶新水酷透明质酸润洁颜膏150g评测结果好吗?性能评测介...

兰蔻寻爱限定口红双支礼盒化妆品实际效果怎样?深度评测剖析,详...

胜莱特多层落地家用置物架评测值得入手吗?3分钟了解评测报告!