极客时间罗剑锋的C 实战笔记
【课程介绍】
我们知道,C++是编程语言中的“万能选手”。它不仅功能强大、非常灵活,而且运行处理速度也很快,适用场景非常广泛。很多新的编程语言都从它身上获得了灵感。无论你是否使用C++开发程序,在学习它的时候,都能够有很多收获。
但是,说起C++,很多人还会有另一个反应:“出了名的难学难用。”的确如此。因为它实在是太复杂了,有太多的特性和细节。
随着标准版本的演进,C++里包含的东西也越来越多。不断膨胀的核心语言加上庞大的标准库,让学习、使用C++的门槛无形中提高了很多,不仅“新手”学起来很难,就连“老手”也觉得用好它并不是一件容易的事情。毕竟,我们总是不可避免地会遇见一些难题:
- C++太庞大复杂了,该用哪些特性?
- 标准库里的东西这么多,核心的工具有哪些?
- 开源的C++库很多,但良莠不齐,哪些库最好用呢?
- ……
基于以上的这些难题,罗剑锋老师根据自己写C++代码的20多年的实践经验,精选出了C++11/14最好用、最实用的特性,不讲语法细节和内部实现原理,直接上代码实战,让你能轻松地看懂、学会。
另外,在讲解核心特性和工具的过程中,他也会带领你绕开语法细节、资源管理、库/工具等方面的陷阱,帮助你高效地写出更安全、更优雅的代码,真正解决C++难学、难调试、难优化的问题。常见问题
问:这个课程和《现代C++实战30讲》有什么区别?
答:
《现代C++实战30讲》针对的是C++17/GCC7,有时候还会用到C++20/GCC 8,侧重深入、透彻地讲解语言特性背后的原理,适合想要学习最新特性、想要掌握C++高级技能的工程师。
本课程基于国内目前的开发现状,从C++11/14和较早版本的GCC(4.8/5.4)入手,精选出最常用、最好用的C++特性,结合代码实战告诉你该怎么用、不该怎么用,更适合对C++有所了解(1~5年)但又对其庞大、复杂的特性不知如何取舍的软件工程师。同时,想要借鉴高手实战经验的优秀工程师,同样也能从本课程中获益。
问:平时很少用C++,学习这个课程可以有什么收获吗?
答:
- 可以学习和借鉴高手在编码规范、面向对象、设计模式、设计原则方面的思考和实践经验。
- 开拓编程思路。C++强调“性能至上”,你可以了解到,在面对同样的问题时,C++是如何考虑并处理的。
- 更好地理解计算机系统的应用机制。C/C++是现代操作系统和许多底层开发框架的核心开发语言,了解C/C++的基本知识,就能够阅读操作系统或框架的源码,为上层应用服务。
- 提升混合编程的能力。用多种语言搭建混合系统是当前的一种流行趋势。使用少量C++代码改写系统中的关键组件,能够大幅度提升整体性能,做到“小投入,大产出”。
课程模块设计
课程主体分为5个模块。
概论:从程序的生命周期和编程范式这两个独特的角度来审视C++,帮你看清楚C++复杂的本质,透彻理解C++程序的运行机制和面向对象编程思想。
语言特性:精选C++中的自动类型推导、智能指针、lambda表达式等几个重要特性,帮你掌握惯用法,消灭代码里的隐患,写出清晰、易读、安全的代码。
标准库:详细介绍最核心的四个部分,即字符串、容器、算法和并发,让你用好这个最基本的库,学会泛型编程,提高程序的运行效率。
技能进阶:介绍C++标准之外的一些第三方工具,带你一起实现序列化、网络通信和性能分析等功能,解决实际开发中遇到的常见问题。
总结:结合C++来讲设计模式,并手把手带你开发一个C++服务端程序,帮你深入理解在项目中,如何更高效地使用C++写出更安全的代码。
除此之外,还特别设计了一个“轻松话题”模块,和你聊些C++之外的东西。这些话题涵盖的范围比较广,包括经典的学习资料、提高工作效率的工具等,让你在掌握核心硬技能的同时,还能拓宽知识面。
【课程目录】
课前导读 (2讲)
开篇词 | 把C++从“神坛”上拉下来,这次咱这么学
课前准备 | 搭建实验环境
概论 (5讲)
01 | 重新认识C++:生命周期和编程范式
02 | 编码阶段能做什么:秀出好的code style
03 | 预处理阶段能做什么:宏定义和条件编译
04 | 编译阶段能做什么:属性和静态断言
05 | 面向对象编程:怎样才能写出一个“好”的类?
语言特性 (5讲)
06 | auto/decltype:为什么要有自动类型推导?
07 | const/volatile/mutable:常量/变量究竟是怎么回事?
08 | smart_ptr:智能指针到底“智能”在哪里?
09 | exception:怎样才能用好异常?
10 | lambda:函数式编程带来了什么?
标准库 (4讲)
11 | 一枝独秀的字符串:C++也能处理文本?
12 | 三分天下的容器:恰当选择,事半功倍
13 | 五花八门的算法:不要再手写for循环了
14 | 十面埋伏的并发:多线程真的很难吗?
技能进阶 (4讲)
15 | 序列化:简单通用的数据交换格式有哪些?
16 | 网络通信:我不想写原生Socket
17 | 脚本语言:搭建高性能的混合系统
18 | 性能分析:找出程序的瓶颈
总结篇 (5讲)
19 | 设计模式(上):C++与设计模式有啥关系?
20 | 设计模式(下):C++是怎么应用设计模式的?
21 | 知识串讲(上):带你开发一个书店应用
22 | 知识串讲(下):带你开发一个书店应用
期末测试 | 这些C++核心知识,你都掌握了吗?