C++ Primer第五版之一:如何修订原书

Barbara Moo已经把完稿的《C++ Primer(第五版)》的文本交付给了出版社,这是7月13号的事情了。据我所知,该书的印刷工作正在进行,8月中旬的时候就应该可以在各大书店上架了。(注:《 C++ Primer》有三位作者:Stanley B. Lippman、Josée Lajoie、Barbara E. Moo)

本书大概是Barbara在过去两年以来最主要的工作内容,尤其是从今年开始,这本书几乎占据了她的全部时间。我也在本书的编写上花费了不少功夫:阅读草稿,写评注和建议,运行测试程序,等等。这样一来的结果就是,我对作者在写书过程中的思路有了非常好的理解。从我的角度来说,我不仅仅能够告诉你作者的思路和方法,我还能告诉你为什么我认为她的思路和方法是如此高明,以至于其他的作者都应当借鉴——当然,我很清楚其他的书不会像这本书一样写,对此我也完全不感到惊讶。

C++11 力图兼容C++03,而C++03 又力图兼容 C++98,C++98 则力图兼容C语言。这个向下兼容的特色是C++如此强大和有用的主要原因之一。因此,通过复习C++03 的书籍中的内容,充分利用C++语言的兼容性,在原先的书籍基础上添加新的章节来介绍C++11的东西,这种思路非常的诱人。采取这样的做法会让事情简单很多:因为原书中的大部分内容不需要改动。

当然,这样做的瑕疵就是,语言的新特性会变成一种“附加题”——也就是说,在理解了该语言的所有原有内容后,在“附加练习”时才会去考虑学习这些新的特性。这样一来,就很可能造成部分读者最后完全没有学到新的东西。举个例子吧,有这么一种现象就是,很多人去学习C++编程,但是他们最后学到的只是如何去用C++的编译器编译C语言程序。在C++11的情况下,也就很可能造成许多人实际上只学到了如何用新的编译器去编译C++03的程序,仅此而已。

Andrew Koenig

本文作者:Andrew Koenig

这儿有一个简单的例子可以说明这种现象。假设v是一个vector<int>泛型,我们期望调用一个方法foo去遍历v中的每个元素。在C++03里面,我们就可以这么做:

当然,更优雅的办法是使用迭代器iterator,这样做的好处是能够有效地避免使用下标

如果我们利用C++11的语法代码去实现上述的功能,那写法会非常不同。比如,我们首先写一个例子,看上去像这样:

然后,我们还可以写成这样:

甚至是这样:

如果一本书教了你前两种写法,那么后面提到的三种写法就成了“附加题”,多数人宁可去坚持使用前两种写法,而完全不去考虑如何记住后面三种写法。那么从效果来说,这本书就变成了一本“介绍C++03的书,顺带提及了C++11”,读者也就成了“学习C++03编程的人”,而不是学习C++11。如果真是如此,那么去写一本关于C++11的书,就完全没有必要了。

Barbara决定采用最艰难的方式写作:不仅讨论C++语言中的新特性,而且将这些新特性融入到本书的各个章节当中。在接下来的几周时间里,我会跟大家一起讨论一下关于本书中的一些例子,以及她所采取的写作策略。

 

英文原文:Andrew Koenig  编译:伯乐在线 – 黄小非

【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

 

2 收藏 6 评论

关于作者:黄小非

黄小非:毕业于重庆大学计算机系,南开大学软件工程硕士,SCJP。 目前在一家国企信息中心任职软件开发工程师。主要技术兴趣为Java平台相关技术、系统构架、C/C++、计算机图形学等。(新浪微博:@黄小非) 个人主页 · 我的文章 · 65 ·  

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 倒数第二个例子应该是foo(*it)吧?

  • 等中文版出来了收藏一本

  • 同意“我是个莽撞人”

  • Isaac   2013/03/06

    今天无意中发现《C++ Primer》出第五版了,于是搜到了这篇修订说明。惊讶地发现第五版居然开始用C++11的新标准写代码了(话说我今天才知道C++有了11标准,我OUT了……),而且我完全看不懂,这代码好神奇……不过编译器和现存库的支持是个问题,我用GCC 4.7试了一下里面的例子,发现如果不加-std=c++11的话根本编译不通过,加了的话虽然例子能通过,但是之前自己写的那些用了NetCDF库的代码完全编译不通过,之前明明一直用的好好的……看来一时半会是甭想用新标准写代码了……

  • Isaac   2013/03/06

    抱歉我错了,之所以旧代码编译不通过是因为忘了链接NetCDF库了,呃,看来GCC的支持还可以……

  • 大家都怎么了?明明是第四版,为什么说是第五版?
    难道是中文版第四版 英文版第五版?

跳到底部
返回顶部