国外经典C++书籍推荐(根据自身体会)

我是一名自动化大三的学生,因为迷恋C++编程再加上购书癖,目前大约将国外经典C++书籍(大约有将近30本)能买到的都买完了,不过这30本还没有全部详细读完(OMG,这得读多久啊),但是对各本书的内容及所处的层次都比较了解。

这里单纯讲【看书】方面的总结,不包含项目实践方面。 

这里先说下一个关于C++学习的方向,两个大方向:面向对象编程(OOP)和泛型编程(GP),暂且把模板元编程也归入泛型编程吧~。这是两个最基础的方向,不过如果单纯抱着一本国内常见的C++入门书籍看的话,很容易将后者忽略(国内入门书籍过重得介绍C和C++中共有的部分和OO部分,极端忽视GP部分,这可能和GP更多地用于函数库的编程而OO更贴近大部分人实际工作的原因有关吧。英文书名因为方便辨识,书名号不写了哦~

那就先从OO方面开始吧。
入门书:首先是两本如同《辞海》般详细的神书:The C++ Programming Language & C++ Primer,这是两本几乎完全涵盖了C++所有特性的书籍,就不做过多介绍了;另外一本同样超赞的Essensial C++,可以看做是一本C++的《新华字典》,也就是上述两本的的简化版;以上3本适合所有同学看,不管是有还是没有C基础的同学,尤其是Primer第五版,随着Moo大神的加入,将Accelerate C++的写作风格带入,呈现出了一种跟第四版完全不同的风格,另外就是C++11标准在第五版被涵盖并放在了醒目的位置,也是超赞的。如果有的同学看的Primer是第四版,那么可以看一下《深入理解C++11》这本书,它大概给读者提供了一个C++11相对C++98/03标准的全览。虽说谈不上深入,但是用来了解C++11标准新特性还是很不错的。尤其是lambda函数,无论现在C++业内对它的争议如何,它确实提供了一种“局部函数”的功效,相对于仿函数的使用有很大便捷。

进阶书:那就不得不提主席大人和他的好基友Meyers的两个著名系列:Excptional 和 Effective系列了,前者包含3本:Excptional C++, More Excptional C++和Excptional C++ Style(中文版叫C++编程剖析),难度逐渐加深。主要是谈工程方面的细节和经验;在这个开始读这个系列之前,有必要将Effective 系列中的两本Effective C++和More Effective C++读一下,尤其是前者,可谓"C++ 程序员必读的第二本书",这个系列是讲述编程风格的。这两个系列读完后可以看看(也可以不用看)《C++编程规范》,这可以说是上面两个系列书的总结。重点说下Effective系列和Excptional系列。无论你有没有工程实践的经验,无论你是打算现在就进行工程实践与否,这两个系列书都适合在工程实践之前就阅读,代码风格不用多说,如果想等到工程实践中再重塑的话,估计难以修正回来了;而对于后者而言,就拿Excptional的第一本Excptional C++来说,其书名全名叫《Excptional C++:47 Engineering Puzzles, Programmin》,看书名就知道是讲授工程中的问题,可是这些问题根据我的经验来说,在自己工程实践之前就了解一下问题本身和解决方法是比在实际中遇到了(很有可能遇到了都不知道遇到了,尤其是效率方面的)再去找问题和解决方案好。

其实到此,偏OO方向的书也差不多介绍到这里了,之所以到进阶就结束,因为这方面确实是一些很实在的技术,在结合模板比较少的情况下,很少有所谓的"奇淫技巧"。不过在此要专门推荐一本OO方面更高层次的书 Inside the C++ Object Model,详细地讨论了对象的构造、生存、释放等问题,不过对编译器不熟悉的同学看的话可能就比较吃力了。

接下来就介绍GP方向的书籍。
大部分GP的书籍都是以C++最核心的库STL作为载体来编写的。
入其实从学习GP开始,就不能算作是C++学习的入门了。不过因为分得比较细,还是按照三个层次来介绍吧。

入门书:个人认为没有入门书。。。非要这么说的话只有一本工具书The C++ Standard Library,中文版《C++标准程序库》,译者【侯捷&孟岩】,OMG,在国内C++界响当当的两位大神T.T  这本书在GP(尤其是在STL学习)中的地位,就差不多和新华字典在汉语学习中的地位相仿。。

进阶书:C++ Templates,模板学习的圣经,全面地介绍了模板的各个方面;Effective STL ,meyers的Effective系列的第三本,讲述了STL方面编程风格,也介绍了实际编程中STL库中一些容器和算法的用法和误区;Generic Programming and the STL,讲述了泛型编程的核心思想和各种泛型组件(以STL组件为例)。

深入书: C++ Template Metaprogramming,(中文名C++模板元编程 );《STL源码剖析》,从源代码的角度分析STL中各种容器和算法的实现,【强烈推荐以这本书代替其余任何一本C++数据结构书的学习(前提是如果有信心有毅力学透的话),因为侯捷老师说任何一个C++学生写出来的程序在SGI STL面前只能算三流程序,不妨多看看STL源码】;最后一本则是Modern C++ Design,这是Andrei Alexandrescu配合Loki库出版的书,个人认为这是C++所有我读过的书中最难的一本,没有之一。这是一本充满了"奇淫技巧"的书,用泛型的思想结合模板写出足以让任何人都吃惊的代码——原来还可以这样写。不过这本书中内容的价值则可能是仁者见仁了——一般工作中基本用不到。

除开GP和OO这两个方面,另外还有两本书推荐给大家。一本是API Design for C++,顾名思义讲述如何编写高质量的API接口;另一本是《提高C++性能的编程技术》,讲述一些提高程序效率的技巧,让你知道C++同C一样高效。Ps.这本书结合Effective系列和Excptional系列一起看有奇效哦。

这里推荐两本比较难以区分偏重于OO还是GP的书。

C++ strategies and tactics(中文名《C++编程惯用法》):这本书的副标题叫“高级程序员常用方法和技巧”,其实别被这个副标题吓住了:) 何谓高级程序员?不同的标准有不同的看法,在学习阶段看看又何妨呢~这本书可以说是总结了在OO、GP、异常、重用等几个方面的诸多知识,可以看做是增加了更多模板和重用知识的Effective C++,不过写作风格则是与之迥异了~

Ruminations on C++(大名鼎鼎的《C++沉思录》),C++界著名的技术伉俪Andrew Koenig &Barbara Moo 倾力著作,PS.这本书最后还有孟岩老师和两位作者的访谈录哦~~(正好这个寒假又重读了这本书,感觉这些技术经典真是让人在不同的时期领悟不同的感悟)。这本书的风格和之前推荐的 Accelerate C++很像,也是以大量实际小工程、“课后作业”这类引人入胜的形式,避开讲述C++繁杂的语法(也因为这本书本来就不是入门书),而直接罗列出C++中常用的技巧,诸如handle类,智能指针,函数对象等,不仅阐述了这些技术产生的原因、设计的思想,更是从源码层次分析了这些技术的实现。个人认为,这本书配合前面提及的More Effective C++一书中后面那些动不动一个就有20页之多的item一起看,将会有很大的收获哦~

好吧,关于C++书籍的介绍就差不多到这里了(Boost,Loki库我了解甚少,就不敢妄作推荐了)~


另外补充一下,之所以介绍国外C++书籍而没有提国内的书,并不是内容不好或者存在多大的问题,就拿谭浩强爷爷的那本【销量高达×××万册的】C++书来说吧,虽然我没有买但是室友有一本我借来看了一下,其实相比于国内部分C++书最严重的一个问题———所谓C++编程书就是前面××章讲述C语言知识,最后几章提一下class【黑,哈哈】而言,这本书已经写得很好了~例子很清晰,语言也不存在翻译的问题。不过它依然没有摆脱国内绝大部分C++教材的一个通病———严重偏向于OO,对GP却谈之甚少,这对于C++编程思想的学习是有很大弊端的。OO和GP如果不同时学习单只偏重于OO的话,就会像Scott Meyers在给Modern C++ Design写的序言中所说那样:在写Effective C++和More Effective C++的时候都错过了templates,不禁成为遗憾啊~

————————分割线————————
突然想起忘了推荐一本有相当分量的书,大名鼎鼎的"四人帮"的《设计模式》。这本书已经不仅仅限于语言的范围,涵盖了软开中很多重要的思想。对好多不太了解这方面的同学而言,看着这个名字可能不太清楚这本书与C++的联系,所以在这里提出来一下。
除了借出去3本,其余都在这里了~

 

 
posted on 2015-03-19 20:31  mydec  阅读(2057)  评论(0)    收藏  举报