前言

施教之重,在于简。

—— 西塞罗

如今的 C++ 像个新语言。就是说,跟 C++98 相比,我可以做到更明确,更简洁,也更精炼。 进一步说,编译器核验得更出色,生成的程序运行得更快。

这里所说的 C++ 是被命名为 C++17 的 现行 ISO C++ 标准1,已经被厂商广泛支持,本书对其做一概览。 此外还提到了概束和模块, 它们的定义在 ISO 技术规范(Technical Specification)里, 虽然已经有些应用,但在 C++20 之前尚无计划被纳入标准。

跟其它新兴的编程语言一样,C++体量巨大,还有为数众多的程序库以供不时之需。 这本小册子旨在为资深程序员提供一个概念,去了解现代C++的主要构成。 它涵盖了绝大多数语言特性及多数标准库组件。 本书可在数小时内读完,但很明显,要想写出优良的C++程序远非一日之功。 幸而此书目的并不在于精通,而是给出一个概览,一些关键用例,为程序员入门助一臂之力。

这里假设你有一定的编程经验。如果没有,建议先读一本教材,例如 Programming: Principles and Practice Using C++ (Second edition) [Stroustrup,2014]2,然后再从这里读下去。 就算你以前有过编程经验,你所用过的语言或者所开发过的程序, 也很可能与此书呈现的 C++ 风格大相径庭。

想象一下去某个城市的观光之旅,比如哥本哈根或者纽约。 在几个小时之内,你可以走马观花地逛到主要的打卡点, 听几个相关都市传说,记一些后续旅行的建议。 但你无法仅仅通过观光就详尽了解一个城市, 无法详察所见所闻,无法通晓支配它的规则和潜规则。 要真正了解一个城市,你得在那生活,通常得好几年。 无论如何,只需要一点运气,你就能获取一点概括性的认知、 一个有关该城市特色的便签以及潜在的兴趣列表。 导览结束后,就可以展开深入的探索了。

此次导览中的主要C++语言特性,按其支持的编程风格分类,例如面向对象和泛型编程。 不会给出一个详尽的、参考手册式的对语言特性的逐条检视。 基于优秀教科书的惯例,我试图在使用一个特性之前讲解它, 但这并不总是行得通,而且人们也不总是从头至尾地进行阅读。 所以,希望读者能善加利用交叉引用和索引。

与之相似的是,在此次导览中,会以用例的方式呈现标准库,做不到巨细靡遗。 它也不会涉及标准库以外的程序库。读者可按需要检索相关资料。 [Stroustrup,2013]3 [Stroustrup,2014]4 就是这种资料,此外网络上也有海量的资料(质量参差不齐), 例如 [Cppreference]5。 比方说,当我提到标准库中的某个函数或者类,它的定义就垂手可得, 查阅文档,即可顺藤摸瓜获取大量相关资料。

此导览把 C++ 作为一个整体,而不是像千层饼那样分层呈现。 因此,不会指出语言特性是出自C——作为C++98的一部分, 还是较新的C++11、C++14,或C++17。 此类信息可见于第16章(历史及兼容性)。 我将着眼于本原,尽量简明,但是我没能克制住冲动,介绍了几个超纲的新特性。 这似乎恰好能满足许多已经知悉旧版C++读者的好奇心。

编程语言的参考手册或者标准仅仅规定了可以做什么,但程序员通常对得心应手之道更喜闻乐见。 这个问题通过选题范畴解决了一部分,另一部分解答体现于文本,尤其是忠告小节部分。 更多关于好的不落伍的(good modern)C++要素,参见 《C++ Core Guidelines》[Stroustrup,2015]6。 该核心指南是一份优秀的资料,可供深入探索本书提到的理念。 你大概会注意到,比对核心指南与本书,其格式甚至编号都极其相似。 其中一个原因是,起草核心指南时,主要出处正是本书第一版。

致谢

此处呈现的内容部分援引自《C++程序设计语言(第四版)》, 因此要感谢编撰该书的所有参与者。

感谢所有帮助完善本书第一版的人,以及为其纠错的人。

感谢 Morgan Stanley 让我有时间编写第二版。 感谢哥伦比亚大学2018春季的“Design Using C++”课程, 该课程为本书的一个早期草稿发现了很多笔误及bug,并提供了许多建设性的意见。

感谢 Paul Anderson,Chuck Allison,Peter Gottschling,William Mon, Charles 以及 Sergey Zubkov,他们审阅此书并给出了很多改进意见。

纽约,曼哈顿

本贾尼·斯特劳斯特鲁普

1. 本书英文版出版于 2018 年。 —— 译者注
2. 该书已经有中文版《C++程序设计:原理与实践(原书第2版)》,分为“基础篇”和“进阶篇”两册,由机械工业出版社出版于2017年4月1日。 —— 译者注
3. The C++ Programming Language (4th Edition),该书中文版《C++程序设计语言》已经由机械工业出版社出版于2019年6月1日。 —— 译者注
4. C++ Applications,一个列表,列出了一些全部或绝大部分用 C++ 开发的系统、应用或者程序库,位于作者网站的页面 https://www.stroustrup.com/applications.html。 —— 译者注
5. 在线的 C++ 参考手册,网址在 https://en.cppreference.com。 —— 译者注
6. 即《C++ 核心指南》,网址在https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines,非官方中文版可参见https://github.com/lynnboy/CppCoreGuidelines-zh-CN/blob/master/CppCoreGuidelines-zh-CN.md。 —— 译者注

results matching ""

    No results matching ""