人工精选吴咏炜《现代C++编程实战》
如果你写过几年 C++,但代码还停留在 C++98 的写法——手动 new/delete、裸指针满天飞、模板只会拿来定义容器,那这门课值得你花时间。它的目标不是把你从零教成 C++ 工程师,而是把已经能写 C++ 的人,拉到 C++11 之后的主流工程写法上。 它解决的是"能跑但不够好"的问题 不少
会员可免费下载本篇月会员可免费领取。
开通会员 ›会员 · 按档位
游客按标价购买,不享受上表折扣。
支付成功后自动发放网盘链接,链接失效可找客服免费补
如果你写过几年 C++,但代码还停留在 C++98 的写法——手动 new/delete、裸指针满天飞、模板只会拿来定义容器,那这门课值得你花时间。它的目标不是把你从零教成 C++ 工程师,而是把已经能写 C++ 的人,拉到 C++11 之后的主流工程写法上。
它解决的是"能跑但不够好"的问题
不少工作三五年的人,日常写 C++ 靠的是老习惯:资源靠手动管理,接口传裸指针,遇到拷贝就靠自觉。代码能跑,但一出 core dump 就得逐行排查,加个功能要改好几处。这门课处理的就是这类场景——用智能指针把资源生命周期交给编译器、用移动语义省掉不必要的深拷贝、用 lambda 和标准算法把循环写短、用模板和类型推导让接口更通用。学完最直接的感受是:以前要写五十行的东西,现在十几行,且不容易出错。
学完之后你能独立做什么
- 把一个传裸指针、手动管理内存的老接口,重构成用智能指针和 RAII 的版本,并说清所有权归属;
- 在需要拷贝大对象的地方,判断该用移动还是引用,避免无谓的性能损耗;
- 用 lambda 配合标准库算法替换掉手写 for 循环,处理筛选、变换、累加这类逻辑;
- 读懂并写出带模板约束的通用函数,看懂标准库报的那些长模板错误;
- 用现代并发工具(线程、原子、future)替换掉自己拼的锁和标志位,减少数据竞争。
这些都是日常工作里立刻能用的,不需要等学完整门语言才见效。
资料的组织方式
资料围绕语言特性的演进展开,主线是"旧写法的问题 → 新特性怎么解决 → 实际怎么用"。不是按语法手册的条目平铺,而是按真实代码会遇到的取舍来讲:什么时候智能指针反而不合适,移动语义为什么没生效,模板推导为什么会得出意料之外的类型。每块内容都对应一批可对照的代码,方便你把自己项目里的老代码拿来做比对和改写。
什么基础适合看
前提是你能独立用 C++ 写出几百行、能编译通过的代码,知道指针、引用、类、继承是怎么回事。完全没碰过 C++ 的话,这门课偏快,会跟不上。适合三类人:写 C++ 但没系统用过 C++11 及之后特性的在职开发者;从 C、Java 或 Python 转过来、要接手 C++ 项目的转岗者;准备面试、需要把现代 C++ 讲清楚的求职者。
需要说明的是,课程聚焦语言特性和工程写法,不涉及特定框架、GUI 库或游戏引擎。如果你要找的是某个具体项目的实战,方向不对。
怎么用这份资料
建议不要从头顺看一遍就当学完。更有效的做法是:先挑自己最常踩坑的两三块(多数人是内存管理和移动语义),边看边把当前的代码改一遍,改完再继续。模板和并发那部分难度抬升明显,第一遍看不懂可以先跳过,等前面的用法熟了再回头。真正的检验标准不是看完,而是你手上的代码有没有变得更短、更安全。
视频目录(72 节)
00丨课前必读 (2讲)
课程目录
* 00丨开篇词丨C++这么难,为什么我们还要用C++?.html
* 00丨开篇词丨C++这么难,为什么我们还要用C++?.m4a
* 00丨课前必读丨有关术语发音及环境要求.html
* 00丨课前必读丨有关术语发音及环境要求.m4a
01丨基础篇 (9讲)
* 01丨堆、栈、RAII:C++里该如何管理资源?.html
* 01丨堆、栈、RAII:C++里该如何管理资源?.m4a
* 02丨自己动手,实现C++的智能指针.html
* 02丨自己动手,实现C++的智能指针.m4a
* 03丨右值和移动究竟解决了什么问题?.html
* 03丨右值和移动究竟解决了什么问题?.m4a
* 04丨容器汇编I:比较简单的若干容器.html
* 04丨容器汇编I:比较简单的若干容器.m4a
* 05丨容器汇编II:需要函数对象的容器.html
* 05丨容器汇编II:需要函数对象的容器.m4a
* 06丨异常:用还是不用,这是个问题 .html
* 06丨异常:用还是不用,这是个问题 .m4a
* 07丨迭代器和好用的新for循环.html
* 07丨迭代器和好用的新for循环.m4a
* 08丨易用性改进I:自动类型推断和初始化.html
* 08丨易用性改进I:自动类型推断和初始化.m4a
* 09丨易用性改进II:字面量、静态断言和成员函数说明符.html
* 09丨易用性改进II:字面量、静态断言和成员函数说明符.m4a
02丨提高篇 (11讲)
* 10丨到底应不应该返回对象?.html
* 10丨到底应不应该返回对象?.m4a
* 11丨Unicode:进入多文字支持的世界.html
* 11丨Unicode:进入多文字支持的世界.m4a
* 12丨编译期多态:泛型编程和模板入门.html
* 12丨编译期多态:泛型编程和模板入门.m4a
* 13丨编译期能做些什么?一个完整的计算世界.html
* 13丨编译期能做些什么?一个完整的计算世界.m4a
* 14丨SFINAE:不是错误的替换失败是怎么回事.html
* 14丨SFINAE:不是错误的替换失败是怎么回事.m4a
* 15丨constexpr:一个常态的世界.html
* 15丨constexpr:一个常态的世界.m4a
* 16丨函数对象和lambda:进入函数式编程.html
* 16丨函数对象和lambda:进入函数式编程.m4a
* 17丨函数式编程:一种越来越流行的编程范式.html
* 17丨函数式编程:一种越来越流行的编程范式.m4a
* 18丨应用可变模板和tuple的编译期技巧.html
* 18丨应用可变模板和tuple的编译期技巧.m4a
* 19丨thread和future:领略异步中的未来.html
* 19丨thread和future:领略异步中的未来.m4a
* 20丨内存模型和atomic:理解并发的复杂性.html
* 20丨内存模型和atomic:理解并发的复杂性.m4a
03丨实战篇 (7讲)
* 21丨工具漫谈:编译、格式化、代码检查、排错各显身手.html
* 21丨工具漫谈:编译、格式化、代码检查、排错各显身手.m4a
* 22丨 处理数据类型变化和错误:optional、variant、expected和Herbception.html
* 22丨 处理数据类型变化和错误:optional、variant、expected和Herbception.m4a
* 23丨 数字计算:介绍线性代数和数值计算库.html
* 23丨 数字计算:介绍线性代数和数值计算库.m4a
* 24丨 Boost:你需要的“瑞士军刀”.html
* 24丨 Boost:你需要的“瑞士军刀”.m4a
* 25丨 两个单元测试库:C++里如何进行单元测试.html
* 25丨 两个单元测试库:C++里如何进行单元测试.m4a
* 26丨 Easylogging++和spdlog:两个好用的日志库.html
* 26丨 Easylogging++和spdlog:两个好用的日志库.m4a
* 27丨C++RESTSDK:使用现代C++开发网络应用.html
* 27丨C++RESTSDK:使用现代C++开发网络应用.m4a
04丨新年特别策划 (2讲)
* 新春福利丨 C++好书荐读.html
* 新春福利丨 C++好书荐读.m4a
* 新春寄语丨 35年码龄程序员:人生漫长,走点弯路在所难免.html
* 新春寄语丨 35年码龄程序员:人生漫长,走点弯路在所难免.m4a
05丨未来篇 (3讲)
* 28丨Concepts:如何对模板进行约束.html
* 28丨Concepts:如何对模板进行约束.m4a
* 29丨Ranges:无迭代器的迭代和更方便的组合.html
* 29丨Ranges:无迭代器的迭代和更方便的组合.m4a
* 30丨Coroutines:协作式的交叉调度执行.html
* 30丨Coroutines:协作式的交叉调度执行.m4a
06丨加餐 (1讲)
* 加餐丨部分课后思考题答案合集.html
* 加餐丨部分课后思考题答案合集.m4a
07丨结束语 (1讲)
* 结束语丨终点已达,行程还要继续.html
* 结束语丨终点已达,行程还要继续.m4a
配套笔记(36 份 PDF)
00丨课前必读 (2讲)
* 00丨开篇词丨C++这么难,为什么我们还要用C++?.pdf
* 00丨课前必读丨有关术语发音及环境要求.pdf
01丨基础篇 (9讲)
* 01丨堆、栈、RAII:C++里该如何管理资源?.pdf
* 02丨自己动手,实现C++的智能指针.pdf
* 03丨右值和移动究竟解决了什么问题?.pdf
* 04丨容器汇编I:比较简单的若干容器.pdf
* 05丨容器汇编II:需要函数对象的容器.pdf
* 06丨异常:用还是不用,这是个问题 .pdf
* 07丨迭代器和好用的新for循环.pdf
* 08丨易用性改进I:自动类型推断和初始化.pdf
* 09丨易用性改进II:字面量、静态断言和成员函数说明符.pdf
02丨提高篇 (11讲)
* 10丨到底应不应该返回对象?.pdf
* 11丨Unicode:进入多文字支持的世界.pdf
* 12丨编译期多态:泛型编程和模板入门.pdf
* 13丨编译期能做些什么?一个完整的计算世界.pdf
* 14丨SFINAE:不是错误的替换失败是怎么回事.pdf
* 15丨constexpr:一个常态的世界.pdf
* 16丨函数对象和lambda:进入函数式编程.pdf
* 17丨函数式编程:一种越来越流行的编程范式.pdf
* 18丨应用可变模板和tuple的编译期技巧.pdf
* 19丨thread和future:领略异步中的未来.pdf
* 20丨内存模型和atomic:理解并发的复杂性.pdf
03丨实战篇 (7讲)
* 21丨工具漫谈:编译、格式化、代码检查、排错各显身手.pdf
* 22丨 处理数据类型变化和错误:optional、variant、expected和Herbception.pdf
* 23丨 数字计算:介绍线性代数和数值计算库.pdf
* 24丨 Boost:你需要的“瑞士军刀”.pdf
* 25丨 两个单元测试库:C++里如何进行单元测试.pdf
* 26丨 Easylogging++和spdlog:两个好用的日志库.pdf
* 27丨C++RESTSDK:使用现代C++开发网络应用.pdf
04丨新年特别策划 (2讲)
* 新春福利丨 C++好书荐读.pdf
* 新春寄语丨 35年码龄程序员:人生漫长,走点弯路在所难免.pdf
05丨未来篇 (3讲)
* 28丨Concepts:如何对模板进行约束.pdf
* 29丨Ranges:无迭代器的迭代和更方便的组合.pdf
* 30丨Coroutines:协作式的交叉调度执行.pdf
06丨加餐 (1讲)
* 加餐丨部分课后思考题答案合集.pdf
07丨结束语 (1讲)
* 结束语丨终点已达,行程还要继续.pdf





