路过的 C++高手就不用看了, 我写的都是瞎扯淡的,不适合你们 。
小弟我最近迫于科研压力一个月啃完了《C++ Primer》,纯粹属于狗啃不辨滋味的。我一天看30页,30天看完一共900多页。不过里面很多地方没仔细去看,一方面是自己心浮气躁,另外一方面是在是这本书的写作风格不适合快速阅读。我原来做了多年的C的开发,C++和Java也都有尝试,但是由于不是工作需要所以也没有深入去掌握,但是对于OOD还是有些理解的。所以这次看《C++ Primer》可以算是入门,也可以不算。以上就是我的基本情况,如果各位看客有和我相似的基础, 那就继续看下去。

其实这本书的内容涵盖还是很广泛的,看完后一段时间里面自己也觉得无法总结心得,所以我想分为多个子范围来归纳自己的感受,以免被人砸砖说我以偏概全。大致的内容包括:
写作风格 适合的读者层次
实用性 总结
这是目前我能想到的,如果还有其他的我想到再补充把。

继续(昨天很生气,已经快写完了,结果笔记本死机了什么都没了,今天只能重头写了)

写作风格
    个人认为《C++ Primer》的写作风格是教学笔记。大家回忆一下自己上学时候的情景,是不是在一段时间后再看自己的笔记或者老师上课发的讲稿总有那种跟不上趟的感觉。《C++ Primer》给人的也是这有的感觉,这本书总体感觉作者写的一气呵成,虽然分各个独立章节,但是内容和举例上都有连续性,思路上如行云流水。这点是特点也是坏处, 坏处在于作为入门而言,读者很难通过自学把握如此大篇幅的行云流水。而且要把握关于一个抽象数据结构的描述(如List), 读者必须毫不走神的在连续几天里把几百页的内容贯穿起来,实在不是容易的事情。如果有个C++的老师拿这本书作为讲本,那是很合适的。如果老师完全掌握这本书的思路,那学生肯定能听的很过瘾(当然学生也必须有一定的基础)。

适应的读者层次
  《C++ Primer》绝对不是一本适合入门的C++教材。这个观点是很多人的共识。即便是这本书的翻译者老潘在序言里面也说了类似的观点。这点上可以看出作者写这本书的矛盾心态,即想写一本C++的入门书(从这本书的名字中的Primer可以看出),又希望能写成一本实用性的书——结果却写成了一本教学笔记(见上)。
  回到正题。为什么说这本书不适合入门,原因有二:
      1. 作者放弃了基础的C++语言的语法介绍
      2. 作者所采用的例子过于抽象和系统性
      3. 作者对于语言实用细节的说明多于整体性的描述

在语法介绍方面, Stanley老兄几乎没什么谋篇布局可言,大致的订了几个方面包括数据类型,逻辑描述等等。可以看出这位大牛实在不愿意对于基础语法花太多的力气,相反他对语法中的类型转换倒是花了大篇章进行介绍,几乎把各种可能的转换情况都说了个遍,同时也费了不少笔墨介绍了转换规则中的设计思想,可以看出他对C++ 语言设计的功力。但是这些往往是最让初学者头皮发麻的。思想性的东西往往应该放在整体语法语义介绍的基础之上,否则直接上来就讲这个,我觉得不可取,反而吓跑大多数人。

  其次是书中的例子。整部书基本上是以例子驱动的(case-driven)。借助这种方式,能让人最直接的了解和接受C++语言的设计思想。书中的例子都是个个珠玑,值得把玩。但是给入门者看,估计连看热闹的兴趣都没有别说看门道了。 书中的例子基本上以一个单词统计程序以及抽象数据结构的介绍为中心。我记得开篇是介绍list抽象的。其中涉及了大量关于如何去设计以及如何设计List类型的探讨。作为一个经常接触C++开发的读者,这些思想性的东西是很可贵的。但是对于初学者而言,对 List抽象数据结构缺乏直观的认识,要跟着作者的思路深入真的不是容易的事情。我自己是做C开发的,自己要经常写一些抽象数据结构的实现,所以觉得作者的例子很有帮助,但是到后来也觉得跟的很痛苦了,因为作者走到了对抽象的范型的介绍,已经超出了我以实用性为主的认识,因此对于入门者来说这些例子太难消化。此外,这些例子的规模实在太大, 很难让读者自己去编译和实现,除非碰上特别有学习激情者,反正我不在此例。

最后一方面就是书的讨论重点并不适合入门。这本书通篇看下来,作者的重点主要放在C++语言本身的设计思想及其在语言运用中的实际影响两个方面。说白了就是“我设计C++的原则是什么”以及“因为我的这些原则,所以在实际中哪些哪些地方要注意,会有哪些潜在错误”。这些东西好比武功心法,洗髓经之类的——不谈一招一式的具体招式而只谈心得和要领。我想这些东西少林方丈是不会作为新和尚的第一课的内容的。

那么什么样的读者适合看这本书?我觉得适合有一定C++实际经验积累的读者,适合想从初学者步入所谓高手行列的读者。有了一定的语言基础才能明白书中的一些经验性和实际性的说明文字,才能理解老stanley的良苦用心。而这些思想性的东西也是C++初学者和真正能掌握这门语言的程序员之间的区别。

实用性
其实上面已经说了很多了。如果你把这本书当作入门自学教材,那这本书没有实用性;如果是当作案头工具书,这本书的写作风格绝对不允许你在几分钟内找到你所要的东西,因为所有的东西都被老stanley焊进了他的行云流水的写作思路中了——你能在一杯糖水中舀出一块糖来吗? 如果你把这本书当作教材,那这本书倒是有点实用价值,如果自身功力足够的确可能对坐在下面的学生造成极大的杀伤力。如果你把这本书当闲适消遣来看, 那这本书倒是挺合适,让人读起来有一种和作者思想交流的感觉。

总结:
总体来看,《C++ Primer》当得起“经典”两个字。从这本书上能学到很多东西。 不足的一方面在于作者写书的矛盾性,让这本书写的不上不下的,让人读起来费劲儿且不亲切,需要读者有一定的耐心。经典的内容,不友好的表述,估计是对这本书比较客观的评价。

补注,感谢紫光输入法。我开始的适合用微软输入法,敲的我手指都抽筋了,最终不能忍了,还是换回紫光输入法了,舒服多了。