2006-11-26

C++ 优秀图书一览

关键字: C++, 读书
1.The C++ Programming Language, by Bjarne Stroustrup, Speical 3rd edition,Addison Wesley 多谢wzgame指正,改过来了。



这是C++创始人B教主之力作,描述C++语言之经典一书。这本书第三版是97年出的,B教主老人家给这本书开了个网页http://www.research.att.com/~bs/3rd.html,2000年,又出了个Special 3rd edition,和97年的第三版相比,多了两个Appendix,这两章在网页上可以下载,除此之外,还改了1000多个小错误。我说B教主你老人家小错误犯的也太多了吧,为什么不像Knuth老人家学习学习,人家多严谨那。要把这本书当参考手册,还得去买2000年那个版本的。

B教主总共写了三本书,The C++ Programming Language,The Design and Evolution of C++,The Annotated C++ Reference Manual,加上翻译本合起来卖了上百万多份那,厉害厉害。

2. The C++ Standard, Wiley,ISBN:0-470-84674-7



这本书是C++语言标准,C++的语法太繁琐,所以有些吃不准的地方,还是得翻这本书。厚厚一本书,700多页,但是用的纸非常轻,拿起来不沉。就是装订的不好,书脊有点松松散散,让人担心看多了某天书会散架。

3. C++ Templates, The Complete Guide,by Vandevoorde, Josuttis,Addison Wesley, ISBN:0-201-73484-2



之所以这么重视这本书,是因为自1987年以来,C++的开发重点就不是面向对象了,而是templates, static polymorphism, generic programming, multiparadigm programming. 掌握好了,C++的template的威力是巨大的。

这本书的文笔非常简洁易懂,书的排版也很好,读起来非常舒服。

4. The C++ Standard Library,A Tutorial and Reference,by Josuttis,Addison Wesley,ISBN: 0-201-37926-0



这本书的作者,也是上本书的作者之一,写的非常易懂。可能因为作者是个德国人,英语非母语者写的英语最好懂。

个人认为是讲STL最好的一本书,C++的标准库全是用template设计的,没多少OO的影子。任何一个学C++的,必须学习STL,学习STL,这本书最好.

5.Modern C++ Design,Generic Programming and Design Patterns Applied, by Andrei Alexandrescu,Addison Wesley, ISBN: 0-201-70431-5



这本书用了很多玄之又玄的技术,读起来很吃力,有不少技术在C++ Templates The Complete Guide一书中都讲过,建议还是先读C++ Templates。作者的名气是很大的,一个极为优秀的程序员,不过书写的不流畅。

6.C++ Template Metaprogramming, by Abrahams, Gurtovoy,Addison Wesley, ISBN: 0-321-22725-5



我个人经历,读Modern C++ Design一书读来吃力,但至少还勉勉强强跟的上,读这本书根本就如同读天书,努力三天,身心受创,吐血而去,发誓苦练C++内功,将来回头算账。

这里说两句别的,以上两本书都出自Addison Wesley的Indepth系列,网址在这里:http://www.awprofessional.com/series/indepth/

这个系列出的书,都是好书,如Exceptional C++, Exceptional C++ Style, More Exceptional C++, C++ Gotchas等等,因为没有读过,无法发表评论,但是这个系列的书都值得一读,甚至反复阅读。

7.Effective C++, More Effective C++, by Scott Meyers



这两本书很有名很经典,历史也很悠久,Scott Meyers写书时,template编程还不流行,所以书里讲的大多涉及传统OO. Scott Meyers的文笔非常好,读起来很舒服。

8.Inside the C++ Object Model, by Stanley B. Lippman



也是很有名的书了,很仔细的描述了C++程序运行时,计算机里到底发生了什么事,这本书看完,读一般的C++程序如行云流水,当然,高级template应用例外。

9.The Design and Evolution of C++, by Bjarne Stroustrup



B教主另一大作,描述了C++的历史,及语言特性的由来,对喜欢刨根问底想明白C++为什么是这样的人很有参考价值。

10.C++ Primer, 4th edition, by Lippman, Lajoie, Moo.



名书,第四版封面上写着,超过450 000个程序员,通过本书前版学习C++. 好多版税啊。我刚学C++时用第二版来做参考用。如果有Java, C, C#编程经验但是没用过C++的可以用这本书做入门书。

最后给C++语言圈子打打广告,欢迎加入C++语言圈,共同学习探讨C++语言。
http://cpp-circle.javaeye.com
评论
bigpanda 2006-12-15
ajoo 写道
c++ template meta code就是一个
1。duck typing
2。没有debugger
3。只能操作c++类型和编译期整数
4。语法不同寻常的繁琐
的functional language。


这句话在肚子里嘀咕了好几年,因为FP的功夫太差,一直没敢说出来,哈哈,现在经过专家鉴定,终于可以说了。

wzgame 写道
The C++ Programming Lanuage

才发现Language


多谢,已经改过来了。
wzgme 2006-12-15
The C++ Programming Lanuage

才发现Language

这本也不错
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices ,by Herb Sutter, Andrei Alexandrescu

http://www.amazon.com/exec/obidos/ASIN/0321113586/qid%3D1124243602/sr%3D11-1/ref%3Dsr%5F11%5F1/103-4743897-6581446
Elminster 2006-12-13
template meta programming 的玩法确实本质上就是一个非常粗糙的 FP ,类型和编译期常量相当于一般 FP 中的值,那些接受一个类型作为模板参数导出新类型的类模板相当于 FP 中的函数。

不过模板这一块,并不是只有 template meta programmming 一种玩法。许多人把泛型和 TMP 混为一谈,但它们的内涵和所要解决的问题是有区别的。
qiezi 2006-12-13
当然不是写出LOKI这样的代码,如果能自创这样一套自然也说明远远地过了这个槛了我说的这个槛就是平时写代码,会不会自然地在各种泛式中找到最适合的并且用它来实现,特别是本来适合用模板来实现的,却故意要避开它。

模板和DLL并没有产生出更复杂的东西,容易出现问题的地方其实不是模板带来的,这部分一般是内存管理问题,和模板无关。也的确是和是不是底层没什么关系,JNI也是贴近底层的。
runes 2006-12-13
另外,第四个问题,和底层不底层关系不大吧,你见过c出现这样的问题?
runes 2006-12-13
那个槛,是能 写loki那样的代码吗?
qiezi 2006-12-13
runes 写道

4. 这是个常见问题,做多了每个人肯定都遇见过,现在在这里说 应该如何考虑云云,其实都是事后诸葛,因为吃过苦头了。我不认为,有多少人,没有经过一番折腾 或者 经过 有经验的“提示&教育”,一转到cpp这边就自悟的。

主要是因为C++太底层了,边界问题感觉不是很突出,所以容易犯错误。你写点JNI多半也有一样的问题,但它有个明显的边界。在这里都会跨语言、跨DLL、跨平台(java/nature)都是比较麻烦的。
runes 写道

5. 前半句同意,后半句的入门似乎,太模糊了,在看 新思维 那本前,我也以为自己入门了,后来才发现
自己根本不懂模板,所以 到底 哪里才是那个“槛”,这也是个问题。

模板与FP,你没有看见ajoo的回复吗?

我觉得这个“槛”就是会看和会写之间的界限,如果你只看不用,永远还是有个槛。

ajoo的回复我看到了,不过我不认为C++的模板和FP是等同的,C++模板借了FP思想,但它用于静态类型实际上走了很远,唯一的相同点就是泛型。
runes 2006-12-13
qiezi 写道
runes 写道

个人对模板绝大多数时候 持否定态度,

1.编译慢,

C++编译即便不用模板也是慢的,用了模板更加慢,这跟它的头文件包含方式有很大关系。
runes 写道

2.编译出错 巨海量的信息(当然如果是STL的话,STLfilter可以帮一下忙),
虽说看多了可能也就习惯了,不过总的来说,错误信息绝对不如不用模板提示的好。

看习惯了也一样,模板可以提升生产力,同时也有这些副作用,取舍问题。
runes 写道

3.模板绝对是,“喜欢耍小聪明”人的绝佳舞台,如果此人C++有不错的水平,又“喜欢耍小聪明”,同时是一个狂热者,
哦,my god,维护他的代码绝对是场灾难。

这个帽子不大不小,不褒不贬,反过来也可以说不喜欢用模板的人“喜欢写重复代码”。基本上初学C++的人都会接触STL,有多少人说用了STL的代码难以维护?
runes 写道

4.如果你感觉以上的还不够头大,那最好把模板和动态库一块玩玩,hoho.............

基本上没人把模板带入到动态库的导出接口中,适当地处理语言边界和DLL边界,也是搞C++必须要考虑的。
runes 写道

5.模板meta 编程,呜呼,脑筋急转弯 呼?

个人对C++越用越持否定态度,基本只用better C,STL(做小心谨慎状),极少情况下使用模板

模板比宏还要难以编写和使用,如果它给你带来的不是快乐,反感它放弃它也是正确的选择。模板入门比较困难,过了这个槛,再深入就没什么了,都是些技巧的组合。我感觉比FP简单多了,那些FP语言看了才叫头大。。。


嗯,qiezi兄 一条一条的回复,太认真了,堪做回帖的楷模,让我等随便一点就回帖者真是汗颜啊。

1. 有模板肯定比没模板的 编译时间长,回复和原文观点一致,不必讨论了。
2. 回复和原文观点一致,不必讨论了。
3. 嗯,严格来讲,我在讲这句的时候,应该加一个注解: 这里的模板指的是,自己写的,而不是用标准库。
4. 这是个常见问题,做多了每个人肯定都遇见过,现在在这里说 应该如何考虑云云,其实都是事后诸葛,因为吃过苦头了。我不认为,有多少人,没有经过一番折腾 或者 经过 有经验的“提示&教育”,一转到cpp这边就自悟的。
5. 前半句同意,后半句的入门似乎,太模糊了,在看 新思维 那本前,我也以为自己入门了,后来才发现
自己根本不懂模板,所以 到底 哪里才是那个“槛”,这也是个问题。

模板与FP,你没有看见ajoo的回复吗?
Elminster 2006-12-13
ajoo 写道
c++ template meta code就是一个
1。duck typing
2。没有debugger
3。只能操作c++类型和编译期整数
4。语法不同寻常的繁琐
的functional language。


你忘了加上“在编译时由编译器运行”这个重要修饰了。
qiezi 2006-12-13
runes 写道

个人对模板绝大多数时候 持否定态度,

1.编译慢,

C++编译即便不用模板也是慢的,用了模板更加慢,这跟它的头文件包含方式有很大关系。
runes 写道

2.编译出错 巨海量的信息(当然如果是STL的话,STLfilter可以帮一下忙),
虽说看多了可能也就习惯了,不过总的来说,错误信息绝对不如不用模板提示的好。

看习惯了也一样,模板可以提升生产力,同时也有这些副作用,取舍问题。
runes 写道

3.模板绝对是,“喜欢耍小聪明”人的绝佳舞台,如果此人C++有不错的水平,又“喜欢耍小聪明”,同时是一个狂热者,
哦,my god,维护他的代码绝对是场灾难。

这个帽子不大不小,不褒不贬,反过来也可以说不喜欢用模板的人“喜欢写重复代码”。基本上初学C++的人都会接触STL,有多少人说用了STL的代码难以维护?
runes 写道

4.如果你感觉以上的还不够头大,那最好把模板和动态库一块玩玩,hoho.............

基本上没人把模板带入到动态库的导出接口中,适当地处理语言边界和DLL边界,也是搞C++必须要考虑的。
runes 写道

5.模板meta 编程,呜呼,脑筋急转弯 呼?

个人对C++越用越持否定态度,基本只用better C,STL(做小心谨慎状),极少情况下使用模板

模板比宏还要难以编写和使用,如果它给你带来的不是快乐,反感它放弃它也是正确的选择。模板入门比较困难,过了这个槛,再深入就没什么了,都是些技巧的组合。我感觉比FP简单多了,那些FP语言看了才叫头大。。。
ajoo 2006-12-13
c++ template meta code就是一个
1。duck typing
2。没有debugger
3。只能操作c++类型和编译期整数
4。语法不同寻常的繁琐
的functional language。
runes 2006-12-12
jack 写道
引用
之所以这么重视这本书,是因为自1987年以来,C++的开发重点就不是面向对象了,而是templates, static polymorphism, generic programming, multiparadigm programming. 掌握好了,C++的template的威力是巨大的。


就我所知。好多初学C++,或者已经用了很多年C++的人,都不知道这点。

不过也不影响他们做开发,C++开发这事,绝对是八仙过海,各显神通。

另外template用的多了,编译那个慢阿。简直不能忍受。
曾经用过应用大量template的框架smart++来开发windows程序,就一个窗口,什么都没有窗口程序,用API或者MFC来开发,编译时间非常短。要是Smart++来写同样的功能,天,足足要几分钟才能编译好。本来还想借此大量应用下template,这么慢,太影响工作了,只好放弃。





个人对模板绝大多数时候 持否定态度,

1.编译慢,

2.编译出错 巨海量的信息(当然如果是STL的话,STLfilter可以帮一下忙),
虽说看多了可能也就习惯了,不过总的来说,错误信息绝对不如不用模板提示的好。

3.模板绝对是,“喜欢耍小聪明”人的绝佳舞台,如果此人C++有不错的水平,又“喜欢耍小聪明”,同时是一个狂热者,
哦,my god,维护他的代码绝对是场灾难。

4.如果你感觉以上的还不够头大,那最好把模板和动态库一块玩玩,hoho.............

5.模板meta 编程,呜呼,脑筋急转弯 呼?




个人对C++越用越持否定态度,基本只用better C,STL(做小心谨慎状),极少情况下使用模板
rongsantang 2006-12-12
正在学习c++,买了本c++ primer,看来没有买错,有空回来跟大家交流交流。
bigpanda 2006-11-26
jack 写道
就我所知。好多初学C++,或者已经用了很多年C++的人,都不知道这点。

不过也不影响他们做开发,C++开发这事,绝对是八仙过海,各显神通。



是啊,C++支持的编程Paradigm太多了,可以面向对象,也可以像C那样面向过程,高级的Template编程感觉就像动态语言或functional编程语言一样。(这方面尚未掌握,凭感觉而已。)


sevenbamboos 写道
后来接触了python,lisp后渐渐知道,要那个类型约束干什么


这话经典。
sevenbamboos 2006-11-26
为什么c++, java最终都要把template或者说范型给加进来呢?c++不是单根的,更加迫切一点,于是很早就加进来了,还变成了很重要的一块(stl);java也终于引进了。
一开始写template的时候,老在想,对这个参数连个类型约束都没有,传进来什么是什么。后来接触了python,lisp后渐渐知道,要那个类型约束干什么
jack 2006-11-26
引用
之所以这么重视这本书,是因为自1987年以来,C++的开发重点就不是面向对象了,而是templates, static polymorphism, generic programming, multiparadigm programming. 掌握好了,C++的template的威力是巨大的。


就我所知。好多初学C++,或者已经用了很多年C++的人,都不知道这点。

不过也不影响他们做开发,C++开发这事,绝对是八仙过海,各显神通。

另外template用的多了,编译那个慢阿。简直不能忍受。
曾经用过应用大量template的框架smart++来开发windows程序,就一个窗口,什么都没有窗口程序,用API或者MFC来开发,编译时间非常短。要是Smart++来写同样的功能,天,足足要几分钟才能编译好。本来还想借此大量应用下template,这么慢,太影响工作了,只好放弃。
bigpanda
  • 浏览: 65472 次
  • 性别: Icon_minigender_1
  • 来自: 斯德哥尔摩
  • 详细资料
搜索本博客
博客分类
我的相册
7d96121a-b3fc-420d-95fc-a095981664af-thumb
books-small
共 17 张
存档
最新评论