分享 | C++ Primer 中文第五版 PDF EPUB

发布时间 2023-11-23 00:10:56作者: ssans

C++ Primer 中文第五版 PDF EPUB:https://qweree.cn/index.php/142/

书籍信息

书名:《C++ Primer 中文版(第 5 版)》
原作名:C++ Primer, 5th Edition
作者:[美] Stanley B. Lippman / [美] Josée Lajoie / [美] Barbara E. Moo

内容简介

这本久负盛名的C++经典教程,时隔八年之久,终迎来史无前例的重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C++ 大师 Stanley B. Lippman 的丰富实践经验,C++标准委员会原负责人 Josée Lajoie 对C++标准的深入理解,以及C++ 先驱 Barbara E. Moo 在 C++教学方面的真知灼见外,更是基于全新的 C++11标准进行了全面而彻底的内容更新。非常难能可贵的是,《C++ Primer 中文版(第5版)》所有示例均全部采用 C++11 标准改写,这在经典升级版中极其罕见——充分体现了 C++ 语言的重大进展及其全面实践。书中丰富的教学辅助内容、醒目的知识点提示,以及精心组织的编程示范,让这本书在 C++ 领域的权威地位更加不可动摇。无论是初学者入门,或是中、高级程序员提升,本书均为不容置疑的首选。

作者简介

Stanley B. Lippman目前是微软公司 Visual C++ 团队的架构师。他从1984年开始在贝尔实验室与C++的设计者Bjarne Stroustrup一起从事C++的设计与开发。他在迪士尼和梦工厂从事动画制作,还担任过JPL的高级顾问。

Josée Lajoie曾经是IBM加拿大研究中心C/C++编译器开发团队的成员,在ISO C++标准委员会工作了7年,担任过ISO核心语言工作组的主席和C++ Report杂志的专栏作家。

Barbara E. Moo是拥有25年软件经验的独立咨询顾问。在AT&T,她与Stroustrup、Lippman一起管理过复杂的C++开发项目。

分享理由

(引用 孟岩推荐序 2013 年 8 月)

C++11 标准公布之后,C++社群出现了久违的热情,有人甚至叫出“C++的复兴”。指望 C++回到 20 世纪 90 年代中期那样的地位显然是昧于大势的奢望,但是 C++经历了这么多年的打磨与起伏,其在工业界的地位已经非常稳固,在很多领域里已经是不可取代也没必要被取代的统治者。新标准的出现能够大大提升 C++开发的效率和质量,因此赢得欢呼也是情理之中。在这种氛围之下,编译器实现的速度也令人惊喜。短短两年时间,从开源的 GCC、LLVM 到专有的 VisualC++和 Intel C++,对于新标准的追踪之快,覆盖之全,与当年 C++98 标准颁布之后迟迟不能落地的窘境相比,可谓对比强烈。当年是热情的开发者反复敦促厂商实现完整标准而不得,为此沮丧无奈,那种心情,至今记忆犹新。时过境迁,今天是编译器实现远远冲在前面,开发者倒是大大地落在了后面。

时至今日,能够基本了解 C++11 标准的程序员恐怕不多,而能够以新的 C++风格开发实践的人更是凤毛麟角。因此,今天的 C++开发者面临的一个重要任务就是快速掌握新的 C++风格和工具。

而说到教授“正宗的”C++11 编程风格,《C++Primer(第 5 版)》如同它之前的版本一样,扮演着法定教科书的角色。

一种优秀的编程语言,一定要对于计算这件事情实现一个完整和自洽的抽象。十几年来编程语言领域的竞争,除却实现质量之外,基本上是在比拼抽象的设计。而 C 语言之所以四十年长盛不衰,根本在于它对于现代计算机提供了一个最底层的高级抽象:凡是比它低的抽象都过于简陋,凡是比它高的抽象都可以用 C 语言构造出来。C++成功的根本原因,恰恰是因为它虽然试图提供一些高级的抽象机制,但是其根基与 C 在同一层面。正因为如此,每当你需要走下去直接与硬件对话时,C++成为 C 之外唯一有效率的选择。我的一个朋友在进行了多年的大型系统软件开发之后,不无感慨地说,C++最大的力量不在于其抽象,恰恰在于其不抽象。

话虽然如此,但是 C++之所以脱离 C 而存在,毕竟还是因为其强大的抽象能力。BjarneStroustrup 曾经总结说,C++同时支持 4 种不同的编程风格:C 风格、基于对象、面向对象和泛型。事实上,把微软的 COM 也算进来的话,还可以加上一种“基于组件”的风格。这么多的风格共存于一种语言,就是其强大抽象机制的证明。但是,在 C++11 以前,C++的抽象可以说存在若干缺陷,其中最严重的是缺少自动内存管理和对象级别的消息发送机制。今天看来,C++98 只能说是特定历史条件造成的半成品,无论是从语言机制,还是标准库完备程度来说,可以说都存在明显的、不容忽略的缺陷。其直接后果,就是优雅性的缺失和效率的降低。我本人在十年前曾经与当时中国 C++社群中不少杰出的人物交流探讨,试图从 C++98 中剪裁出一个小巧、优雅的、自成一体的子集,希望至少在日常编程中,能够在这个子集之内可以写出与当时的 Java 和 C#同样干净明晰的代码。为此我们尝试了各种古怪的模板技巧,并且到处寻找有启发的代码和经验来构造这个语言子集,结果并不理想,甚至可以说是令人非常失望。后来我在我的博客中发表过好几篇文章,探讨所谓的 C++风格问题,其实就是说,C++不支持简洁明快的面向对象风格,大家还不如回到基于对象甚至 C 语言的风格,最多加点模板,省一点代码量。非要面向对象的话,就必须依赖像 Qt 或者 MFC 那样的基础设施才可以。

C++11 出来之后,增强的语言机制和大为完善的标准库,为 C++语言的编程风格带来了革命性的变化。如果能够纯熟地运用 C++11 的新特征、新机制,那么就能够形成一种简洁优雅的 C++编程风格,以比从前更高的效率、更好的质量进行软件开发。对于这种新的风格,我认为“直觉、自然”是最佳的描述。也就是说,解决任何问题不必拘泥于什么笼盖一切的编程思想,也不再沉溺于各种古怪的模板技巧中无法自拔,而是能够根据那个问题本身采用最自然、最符合直觉的方式。C++有自己的一套思维方式,比如容器、算法、作为概念抽象的对象等,很大程度上这套思维方式确实是合乎直觉的。只有到了 C++11 这一代,C++语言的高级抽象才基本完备,这样一种风格才可能真正落实。因此可以说 C++11 对于 C++98 而言,不是一次简单的升级,而是一次本质的跃升。

学习新的 C++风格,并不是轻而易举的事情。即便对于以前已经精通 C++的人来说,熟练掌握 rvaluereference、move 语义,了解 unique_ptr、shared_ptr 和 weak_ptr 的完整用法,明智地使用 function/bind 和 lambda 机制,学习 C++Concurrency 的新技术,都绝非一朝一夕之功。对于那些初学者来说,这件事情更不简单。

本书无论对于初学者还是提高者,都是最经典的教科全书。一直以来,它的特点就是完整而详细,基本上关于语言本身的问题,都可以在这本书里得到解决。而本书的另一个重要优点,就是其完全基于新的编程风格编写,所有的例子和讲解都遵循 C++11 标准所体现出来的思路和风格进行,如果能够踏下心来认真学习和练习,那么就能“一次到位”地掌握 C++11,尽管可能会比较慢。有经验的 C++开发者阅读这本书当然不用从头到尾,选择自己关心的内容学习 C++11 的新特性就可以,是快速升级自身能力的捷径。

差不多十年前,我提出一个观点,每一个具体的技术领域,只需要读四五本书就够了。以前的 C++是个例外,因为语言设计有缺陷,所以要读很多书才知道如何绕过缺陷。现在的 C++11 完全可以了,大家读四五本书就可以达到合格的水平,这恰恰是语言进步的体现。

本书是这四五本中的一本,而且是“教程+参考书”,扛梁之作,初学者的不二法门。另一本是《C++标准程序库(第 2 版)》,对于 C++熟手来说更为快捷。ScottMeyers 的 Effective C++永远是学习 C++者必读的,只不过这本书的第 4 版不知道什么时候出来。AnthonyWilliams 的 C++ Concurrency inAction 是学习用标准 C++开发并发程序的最佳选择。国内的作品,我则高度推荐陈硕的《Linux 多线程服务端编程》。这本书的名字赶跑了不少潜在的读者,所以我要特别说明一下。这本书是 C++开发的高水平作品,与其说是教你怎么用 C++写服务端开发,不如说是教你如何以服务端开发为例子提升 C++开发水平。前面几本书都是谈标准 C++自己的事情,碰到像 iostream 这样失败的标准组件也不得不硬着头皮介绍。而这本书是接地气的实践结晶,告诉你面对具体问题时应怎样权衡,C++里什么好用,什么不好用,为什么,等等。

今天的 C++学习者是非常幸运的,可以在 C++11 这个基础上大步向前,不必再因为那些语言的缺陷和过度的技巧而烦恼。大家静下心来认真读几本书,可以打下很好的基础。