欧长坤-《现代C++教程:高速上手C++ 11、14、17、20》

原文地址

Modern C++ Tutorial: C++11/14/17/20 On the Fly

C++是一个用户群体相当大的语言。从C++98的出现到C++11的正式定稿经历了长达十年多之久的积累。C++14/17则是作为对C++11的重要补充和优化,C++20则将这门语言领进了现代化的大门,所有这些新标准中扩充的特性,给C++这门语言注入了新的活力。 那些还在坚持使用传统C++ (本书把C++98及其之前的C++特性均称之为传统C++)而未接触过现代C++C++程序员在见到诸如Lambda表达式这类全新特性时,甚至会流露出『学的不是同一门语言』的惊叹之情。

现代C++ (本书中均指C++11/14/17/20)为传统C++注入的大量特性使得整个C++变得更加像一门现代化的语言。现代C++不仅仅增强了C++语言自身的可用性,auto关键字语义的修改使得我们更加有信心来操控极度复杂的模板类型。同时还对语言运行期进行了大量的强化,Lambda表达式的出现让C++具有了『匿名函数』的『闭包』特性,而这一特性几乎在现代的编程语言(诸如Python/Swift/… )中已经司空见惯,右值引用的出现解决了C++长期以来被人诟病的临时对象效率问题等等。

C++17则是近三年依赖C++社区一致推进的方向,也指出了 现代C++编程的一个重要发展方向。尽管它的出现并不如C++11的分量之重,但它包含了大量小而美的语言与特性(例如结构化绑定,这些特性的出现再一次修正了我们在C++中的编程范式。

现代C++还为自身的标准库增加了非常多的工具和方法,诸如在语言自身标准的层面上制定了std::thread,从而支持了并发编程,在不同平台上不再依赖于系统底层的API,实现了语言层面的跨平台支持;std::regex提供了完整的正则表达式支持等等。C++98已经被实践证明了是一种非常成功的『范型,而现代C++的出现,则进一步推动这种范型,让C++成为系统程序设计和库开发更好的语言。Concept提供了对模板参数编译期的检查,进一步增强了语言整体的可用性。

总而言之,我们作为C++的拥护与实践者,始终保持接纳新事物的开放心态,才能更快的推进C++的发展,使得这门古老而又新颖的语言更加充满活力。

编译环境:本书将使用 clang++ 作为唯一使用的编译器,同时总是在代码中使用 -std=c++2a 编译标志。

> clang++ -v
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin