为《C++ Primer》第5版中文版写推荐序

花了几个晚上把C++ Primer第5版中文版翻看了一遍,主要关注2011标准中新增的一些要素的讲解。

------------------------------

推荐序

书名:C++ Primer中文版,第5版,

C++一直是我最为钟情的程序设计语言,我曾经在有些场合下提到“C++正在成为一门完美的程序设计语言”。从C++标准1998年版本到2011年版本的变化,基本上印证了我的这一提法。原来版本中来不及引入的内容,以及语言机制中发现的一些缺陷,都在新版本中得以弥补和发展。比如新版标准中引入了无序容器,以弥补原版标准中缺漏了hash容器;新版标准支持移动构造函数和移动赋值运算符,以减小特定场景下对象拷贝的性能开销。新版标准不仅在语言语法上增加了大量特性,而且在标准库里也引入大量设施,使得标准库对于C++语言的重要性远超从前。

“完美的程序设计语言”,听起来很好,但代价是语言变得越来越复杂。从一个完善的类型系统或者一门程序设计语言的角度来看,新版本C++标准是一个里程碑,但是,从C++学习者和使用者角度这未必是好事。语言的复杂性导致学习难度增加,学习周期变长;C++程序员写出好程序的门槛也相应提高。这差不多正是C++语言这几年的现状。我相信,随着计算机科学技术的发展,这种状况未来还会加剧。即便如此,我仍然乐于看到C++语言走向完美。

我与《C++ Primer》这本书的缘分从第3版开始,2001年有机会将其翻译成中文版本。当时,我使用C++已将近十年,通过这本书才第一次全面地梳理了实践中积累起来的C++知识。本书第3版是对1998版标准的全面诠释,我相信至今无出其右者。时隔12年以后,这本书第5版出版,虽然叙述风格跟第3版完全不同,但它在内容上全面顾及到2011版C++标准。第5版之于2011版标准,如同第3版之于1998版标准,必将成为经典的学习读本。

阅读这本书可以全面了解2011版本C++标准的内容。以三位作者在C++语言发展历程中的经历,本书的权威性自不容置疑:既有编译器的开发和实践,又参与C++标准的制定,再加上丰富的C++教学经历。如果说本书第3版是针对C++语言的特性和设计思想来展开讲述,那么,第5版则更加像一本学习教程,由浅入深,并结合大量代码实例来讲述C++语法和标准库。此外,由于本书的全面性,读者也可以将本书当作参考书,以备随时查阅。

本书在讲解的时候,常常会提到“编译器会如何如何”,学习语言的一个境界是把自己想象成编译器,这种要求对于一般的程序设计语言可能太高了,但是对于学习C和C++语言是最理想的方法。像编译器一样来思考和理解C++语言,如果暂时做不到,也不要紧,当有了一定的编写程序经验以后,在“揣摩”编译器行为的过程中可逐渐掌握C++语法特性。因此,本书值得阅读多遍,每多读一遍,就会加深理解。可能是考虑到篇幅的原因,本书很多地方没有展开来透彻地讲解。我相信,作者们已经在深度和广度上做了较为理想的折中。

本书的另一个特色是将C++的语法和标准库融为一体来介绍。C++标准库本身就是C++语法的最佳样例,其中包含不少C++高级特性的指导性用法。在我的程序经历中,有些C++语言特性(比如虚拟继承),我只在标准库中看到过实用做法。本书贯穿始终融合了C++标准库的知识和用法,这符合新版本C++标准的发展和变化,也符合现代软件开发现状。

最后,结合我在工程实践中使用和倡导C++语言的经验,我想提一个关于学习和使用C++语言的“两面性”观点。如前所述,C++语言正在走向完美,所以,C++语言值得学习(甚至研究),这些知识可以成为一切编程的基础。然而,在实践中,不必全面地使用C++语言各种特性,而应根据工程项目的实际情况,适当取舍(譬如动态类型信息、虚拟继承、异常等特性的使用很值得商榷)。通常只鼓励使用C++语言的一个子集就够了,一个值得学习和参考的例子是Google发布的Google C++ Style Guide。尽管在工程中只使用C++的子集,但全面地学习C++语言仍然是必要的,毕竟C++语言是一个整体,并且C++标准库自身全面地使用了C++语言的各种特性。我自己在过去多年的实践中就一直恪守着这种两面的做法。

很幸运,我有机会在本书正式出版以前读到中文翻译版,译文通顺,术语规范。作为经典权威之作的最新版本,本书值得拥有。

 

潘爱民

2013年8月于杭州


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值