C++标准库的那些奇技淫巧也并非空穴来风,总有时候会需要用到的。但是你不需要预先把C++的所有细节和技巧存在脑子里才能够去编程,下面进行学习介绍。
标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。
1、Dinkumware C++ Library
参考站点:http://www.dinkumware.com/P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。
其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的产品中采用Dinkumware的库。
2、RogueWave Standard C++ Library
参考站点:http://www.roguewave.com/这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。
3、SGI STL
参考站点:http://www.roguewave.com/SGI公司的C++标准模版库。
4、STLport
参考站点:http://www.stlport.org/SGI STL库的跨平台可移植版本。
也就是说,随便你拿起哪本C++书籍(包括很多被人们广泛称为“必读经典”的),那么有很大的可能这本书中的内容不是你应该学的,而是你不应该学的。我之所以这么说有两个原因,因为一,我曾经是受害者。二,也是更实质性的原因,这些所谓的必读经典,充斥的是介绍C++中的陷阱和对于C++的缺陷的各种workarounds(好听一点叫Idioms(惯用法)或techniques(技术));
又因为C++中的这类陷阱和缺陷实在数不胜数,所以就拉出了一个“长尾”;这类书籍在所有语言中都存在(“C++标准库缺陷和陷阱”、“Effective Java”、“Effective C#”等等),然而在C++里面这个尾巴特别长,导致这类书数不胜数。
三,这些书中列出来的缺陷和陷阱根本不区分常见程度,对于一个用本程序员来说,应该希望看到“从最常见的问题到最不常见的问题”这样的顺序来罗列内容,然而这些书里面要么全部混在一起,要么按照“资源管理、类设计、泛型”这样的技术分类来介绍内容。
这根本毫无帮助(如果我看到一个章节的内容,我当然知道它讲的是类设计还是资源管理,还用废话么?),使得一个学习者无法辨别并将最重要的时间花在最常见的问题之上。 #t#
最最关键的是:这些书当中介绍的内容与成为一个好程序员根本毫无关系,它们顶多只能告诉你——嗨,小心跌入这个陷阱。或者告诉你——嗨,你知道当你(八辈子都不一定遇到)遇到这个需求的时候,可以通过这个技巧来得以解决吗?
结果读了一本又一本之后,你脑袋里除了塞满了“禁止”、“警戒”、“灯泡”符号之外,真正的编程素质却是一无长进。又或者有这样一类书,热衷于解释语言实现背后的机制,然而语言特性本质上是干嘛用的?是用来在实际编码中进行抽象的(说得好听一点就是“设计”),不是用来告诉你这个特性是怎么支持的。比如我就见过以下的情景:面试官问:“你知道虚函数吗?”得到的回答是一堆关于虚函数表机制的解释。
面试官又问:“那虚函数的好处是什么呢?”到底为什么要虚函数呢?C++标准库得到的回答是:“恩…啊…就是…多态吧”(这时已经觉得回答不够深刻了)。再问:“那多态是干嘛的呢?”哑口无言。