开始
开始
整理自Bjarne Stroustrup的a tour of C 第三版
When you wish to instruct, be brief. – Cicero
C++给人焕然一新的感觉。也就是说,相较于C++98或C++11,如今我能够更清晰、更简洁且更直接地表达我的思想。此外,由此产生的程序不仅得到了编译器更好的检查,运行速度也更快。
本书概述了由当前ISO C++标准C++20定义的C++语言,以及主要C++供应商实现的内容。此外,它还提及了一些目前广泛使用但计划于C++23标准中才纳入的库组件。
与其他现代语言一样,C++语言比较庞大,有效利用它需要大量的库。这本薄书旨在为经验丰富的程序员提供关于现代C++构成的概念。它涵盖了大多数主要的语言特性及标准库组件。
这本书可以在一两天内读完,但显然,写出高质量的C++程序所需的知识远不止于此。不过,本书的目的并非追求精通,而是提供一个概览,给出关键示例,帮助程序员入门。
本书假设你有编程经验。如若不然,请考虑先阅读一本教材,比如《使用C++编程:原则与实践》(第二版)[Stroustrup, 2014],然后再继续阅读此书。即便你之前有过编程经验,你所使用的语言或编写的应用程序也可能与这里介绍的C++风格大相径庭。
想象一下对一座城市,比如哥本哈根或纽约进行观光游览。在短短几个小时内,你将快速浏览主要景点,听一些背景故事,并得到一些接下来做什么的建议。这样的游览之后,你并不会了解这座城市。你无法理解所有看到和听到的一切;有些故事可能听起来奇怪甚至难以置信。你不知道如何遵循支配城市生活的正式和非正式规则。要真正了解一座城市,你往往需要在那里生活多年。然而,幸运的话,你会对城市有一个大致的了解,意识到城市的特别之处,并对自己可能感兴趣的事物产生想法。观光之后,真正的探索才能开始。
本次旅行着重介绍了C++语言的主要特性,这些特性支持诸如面向对象和泛型编程等编程风格。它并不旨在提供详尽无遗、逐个特性的语言参考手册视图。遵循优秀教科书的传统,我会尽量在使用一个特性之前先进行解释,但这并非总是可行的,也不是每个读者都会严格按照顺序阅读。我期望读者具备一定的技术成熟度。因此,鼓励读者利用交叉引用和索引来深入学习。
同样,本指南通过示例而非穷举的方式介绍标准库。鼓励读者根据需要寻找额外的支持材料。C++生态系统远不止ISO标准提供的那些设施(例如库、构建系统、分析工具和开发环境)。网络上有着大量(质量参差不齐)的资料可供查阅。大多数读者会在CppCon和Meeting C++等会议的视频教程和概览中找到有用的内容。对于ISO C++标准所提供的语言和技术细节,我推荐查阅[Cppreference]。例如,当我提及一个标准库函数或类时,其定义可以轻松查找,通过查看其文档,还可以发现许多相关设施。
本指南将C++作为一个整体而非层层叠加的体系来展示,因此我很少明确指出哪些语言特性属于C、C++98或之后的ISO标准。这些信息可以在第19章(历史与兼容性)中找到。我侧重于基础内容并力求简洁,但也没有完全抵抗住过度展示新颖特性(如模块(§3.2.2)、概念(§8.2)和协程(§18.6))的诱惑。略微偏向近期发展也似乎能满足许多已熟悉C++旧版本读者的好奇心。
编程语言参考手册或标准仅说明了可以做什么,而程序员往往更关心如何良好地使用该语言。这一方面部分体现在所涵盖主题的选择上,部分体现在正文内,特别是在建议部分。关于构成现代良好C++实践的更多建议,可以在C++核心准则[C++ Core Guidelines][Stroustrup,2015]中找到。核心准则是进一步探索本书中提出思想的良好资源。您可能会注意到,核心准则与本书中的建议表述甚至编号有显著的相似之处。原因之一是《C++之旅》第一版是最初核心准则的重要来源之一。