C++ 自发明以来,经历了多次修订,每一次修订都为C++ 增加了新的特性并作了一些修改。
纵观C++ 的发展史,从 C++98 的出现到 C++11 的正式定稿经历了长达十年多之久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,而C++20 将这门语言领进了现代化的大门,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。
现代 C++ (指 C++11/14/17/20) 的大量特性使得整个 C++ 语言更加现代化。现代 C++ 不仅仅增强了 C++ 语言自身的可用性,auto
关键字语义的修改使得我们更加有信心来操控极度复杂的模板类型。同时还对语言运行期进行了大量的强化,Lambda 表达式的出现让 C++ 具有了匿名函数的闭包特性,而这一特性在现代的编程语言(诸如 Python/Swift/... )中已经司空见惯,右值引用的出现解决了 C++ 长期以来被人诟病的临时对象效率问题等等。
本文要介绍的这本书就是关于现代C++ 的。相比于传统的C++,现代C++ 具有哪些新特性呢?
本书一定程度上介绍了一些现代 C++ 的黑魔法,但这些魔法毕竟有限,不适合希望进阶学习现代 C++ 的读者,本书的定位系现代 C++ 的快速上手。当然,希望进阶学习的读者可以使用本书来回顾并检验自己对现代 C++的熟悉度。
这本书有中英文两个版本,包含10个章节。每个章节中都有大量的代码,该书作者也提供了代码链接,所有代码按章节组织,文件夹名称为章节序号。此外,每章最后还加入了少量难度极小的习题,用于检验读者能否混合运用当前章节中的知识点,同样地,该书作者也提供了习题答案链接。
中文版链接:https://changkun.de/modern-cpp/pdf/modern-cpp-tutorial-zh-cn.pdf
英文版链接:https://changkun.de/modern-cpp/pdf/modern-cpp-tutorial-en-us.pdf
书籍代码链接:https://changkun.de/modern-cpp/code/
习题解答链接:https://changkun.de/modern-cpp/exercises/
章节目录
第2章:介绍了语言可用性的强化,主要内容包括常量、变量及其初始化、类型推导、控制流、模板以及面向对象。
第3章:语言运行期的强化,主要介绍了Lambda表达式、函数对象包装器、右值引用。
第4章:简单介绍了现代 C++ 中新增的容器,包括线性容器、无序容器以及元组。它们的用法和传统 C++ 中已有的容器类似,相对简单,可以根据实际场景选择需要使用的容器,获得更好的性能。
第5章:介绍了智能指针与内存管理,包括RAII 与引用计数以及指针std::shared_ptr、std::unique_ptr、std::weak_ptr。
第6章:简单介绍了正则表达式,然后根据使用正则表达式的主要需求,通过一个实际的例子介绍了正则表达式库的使用。
第7章:主要介绍了
std::thread、
std::mutex、
std::future
这些并发编程中不可回避的重要工具。除此之外,还介绍了 C++11 最重要的几个特性之一「内存模型」, 它们为 C++ 在标准化高性能计算中提供了重要的基础。第8章:文件系统。该库提供了文件系统、路径、常规文件、目录等相关组件进行操作的相关功能。
第9章:介绍了C++11 的几个特性,包括新类型、noexcept的装饰和操作、字面量以及内存对齐。这几个特性是仍未介绍的现代 C++ 新特性里使用频次较靠前的特性,其中
noexcept
是最为重要的特性,它的功能在于阻止异常的扩散传播,有效地使编译器最大限度地优化代码。第10章:对C++20 进行了展望。
目前,这本书已同步上线GitHub,并在短时间内获得7.1k星。最近更新时间为2020年10月3日,之后可能会有新内容更新。获取最新内容,请查看GitHub:
https://github.com/changkun/modern-cpp-tutorial
其主要研究方向为计算机图形学、机器学习、系统编程以及人机交互,擅长C++、JavaScript、Python等编程语言。
公开发表的学术研究包括: