《C++ Primer》书评
《C++ Primer》中文版(第5版),[美] Stanley B. Lippman、Josée Lajoie、Barbara E. Moo著,王刚、杨巨峰 译,电子工业出版社 2013年9月出版。
这是一本非常经典的C++教程。此第5版的英文版原书,撰写于2012年7月,相较于前几版,它采用当时最新版的C++11标准重新撰写。该标准是C++社群历经十多年、千呼万唤始出来的重磅产物(上一个标准为1998年标准,该标准2003年进行勘误和重新发布),为C++这门语言注入了全新的活力,也开启了后续三年一次的新标准发布(至此,已经发布了C++14、C++17、C++20版本,今年还将发布C++23)。
本书与很多其他C++教材不同,它摒弃了“先介绍C语言”的传统,而几乎完全把读者定位于没有C语言基础的背景,从头传授如何用“纯粹”的C++语言优雅地进行编程,并整合了C++发展多年的实战经验,直接传授各知识点的最佳实践,让初学者尽可能少走弯路。这是一本大部头,即使翻译成为中文,也有800多页。涵盖了C++基础知识的方方面面,即使像我这样使用C++已二十多年的老鸟,仍然可以通过本书查缺补漏。对于大多数知识点,本书都会详细解释原因,让读者知其然、并知其所以然。可以说,能够学习完本书(包括认真完成相应章节的习题)的读者,将有足够能力驾驭好C++语言、独立熟练地进行C++程序开发。
说了本书优点,也再说说本书的缺点。毕竟C++这些年发展迅速,本书中有些内容已略显“过时”,因为有更新的标准支持更精炼的实现方法(期待本书的新版推出)。本书有些示例(诸如介绍“拷贝控制(copy control)”时的示例),为了突出展示相应知识点,设计了过于复杂的代码(以至于由于经验而先入为主的我,反而花费了较大精力,才搞懂该代码的弯弯绕绕)。此外,本书虽然详尽,却也仍未囊括C++11的所有内容,诸如线程相关支持就完全未被提及,这也侧面反映了C++这门语言已经“太过于复杂”。不过,瑕不掩瑜,本书读起来还是非常让人心情愉悦的,这得益于C++新标准的设计优雅,也得益于本书作者们在C++语言发展史上的权威地位、资深经验和写作功力。
都说“C++的学习曲线最为陡峭”,这是因为C++程序员需要跟编译器深入打交道,并在编写代码过程中,通过约束自己,以换取更高的性能和代码安全性(这有点像日漫《Hunter X Hunter》中关于“誓约与制约”的设定,通过约束来换取更强的能力)。举例而言,本书在介绍右值引用时,提及“调用move就意味着承诺”,即移动语义(std::move)需要程序员做出“承诺”,之后该右值将不再被使用,但它应该是可以被重新赋值或析构的有效状态。这无疑增大了程序员在编程过程中的负担(C++标准也在努力通过语法完善,来尽量减轻各类负担),类似的思想贯穿于C++程序员的日常,这的确是这门语言难以驾驭的重要原因。本书在培养读者这方面能力和素质上,可为煞费苦心,而其锤炼而得的全书内容,也无疑是进阶C++高手的必经之路。