Effective STL 读后感

 

Effective STL 这本书我是在年前从图书馆借的,最近回学校有时间就拜读了一遍。虽然有些地方(函数子,分配子,函数配连,分析机制等等 这么一看,感觉好多啊 )还没有完全吃透,但是基本上也看的7788了。

评测

本人的c++水平实在有限,只能从我的一点点经验里稍微说一点。

缺点

  1. 成书时间过早,后面作者也没有很大的修改,导致了作者所说的STL和我们现在使用的STL有所区别,诸如unordered_mapunordered_set,这样好用的东西,作者没有着重笔墨,只是作为非标准库提了一嘴。

  2. 同样的因为成书相对较早,对于革命性的c++11标准里的新东西,笔者是基本上没有提到的,智能指针什么的也只是作为boost库里的版本提了一口。像not1bind2nd,这样的东西在生产实践中事实上用的越来越少了,而lambada作为替代品则用的越来越多。虽然在STL,因为为了需求以及bind等历史因素,可能确定严格弱序,或者有序的一般都是三元以下的谓词,对于书中所采用的函数适配器bind2ndnot1,都是适用的。但是

    1. lambda不需要考虑可配连的问题,也就是在在用函数时不用使用fun_ptr,将函数指针特化为可配连的,用函数子对象时,不用考虑继承那些奇奇怪怪的函数子类,省了很多力气。(当然虚函数的剥离拷贝构造的代价,还是需要考虑的,如果你解决这些问题的方法是bridge pattern的话,内存管理也是要注意的,当然喽,智能指针解千愁)
    2. 功能比起自带的适配器强多了。
    3. 手写自定义函数适配器是高级技巧,而手写lambda不是。
  3. 有些人可能觉得作者废话太多。

  4. 翻译有些生硬。例如。

    • 你会受伤,如果不那么做的话。

优点

  1. 作为c++ 6E(《Effective C++》《More Effective C++》《Effective Modern C++》《Effective STL》《Exceptional C++》《More Exceptional C++》)系列的一员,Effective 系列的三儿子,成书质量非常的高,对于提高c++水平很有帮助。作者的c++水平很高,因此对于c++问题的理解非常透彻,看了本书可以大大提升作为c++程序员的STL水平。
  2. 本书作者对于很难理解的内容,不会堆砌大量的术语,不让人生厌
  3. 此书对于效率的笔墨花了很多,观看本书对于程序速度的提升很有帮助。
  4. 有些章节教会了我们如何写出让别人看得懂得代码,对于读者的团队协作和软件工程都有所帮助。
  5. 此书对于STL的原理与构造都有所提及,不仅仅让人明白这样怎么做,还让人明白背后的机制。
  6. 此书作为一本技术书,却写的十分幽默,不让人感觉无聊。

总体来说这本书极其值得看值得买

后记

以前听别人说c++太过于复杂,需要彻底的革新。当初我还是嗤之以鼻,认为c++的复杂都是需要的。但是在我的c++水平也有所上升之后,我才渐渐明白了他们。c++的高级技巧里充满了为了和过去不好的设计或者过于复杂的设计,交互而搞出的过于复杂的设计。不仅仅是我们为了使用c++而搞出来的高级技巧,甚至连标准也是这样,标准越出约厚。甚至这种历史的约束都影响了STL的命名空间,标准里先出现的东西占据了后出现的东西的位置,后出现的本该和它平行的东西却只能屈居人后,使得命名空间中的命名很不系统化、体系化(mem_funmem_fun_pre)。产生了很多为了复杂而复杂,和不明所以的东西。有人说c++标准需要的不是小修小补,而是壮士断腕。我是赞同的。历史上的很多过时的设计,没必要再去兼容它们了。

这么说未免过于悲观,最起码c++11以来的c++发展还是给这门老语言灌注了不少新的活力。