對(duì)于C++標(biāo)準(zhǔn)庫(kù)進(jìn)行說(shuō)明了解
C++標(biāo)準(zhǔn)庫(kù)的那些奇技淫巧也并非空穴來(lái)風(fēng),總有時(shí)候會(huì)需要用到的。但是你不需要預(yù)先把C++的所有細(xì)節(jié)和技巧存在腦子里才能夠去編程,下面進(jìn)行學(xué)習(xí)介紹。
標(biāo)準(zhǔn)庫(kù)中提供了C++程序的基本設(shè)施。雖然C++標(biāo)準(zhǔn)庫(kù)隨著C++標(biāo)準(zhǔn)折騰了許多年,直到標(biāo)準(zhǔn)的出臺(tái)才正式定型,但是在標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)上卻很令人欣慰得看到多種實(shí)現(xiàn),并且已被實(shí)踐證明為有工業(yè)級(jí)別強(qiáng)度的佳作。
1、Dinkumware C++ Library
參考站點(diǎn):http://www.dinkumware.com/P.J. Plauger編寫(xiě)的高品質(zhì)的標(biāo)準(zhǔn)庫(kù)。P.J. Plauger博士是Dr. Dobb's程序設(shè)計(jì)杰出獎(jiǎng)的獲得者。
其編寫(xiě)的庫(kù)長(zhǎng)期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的產(chǎn)品中采用Dinkumware的庫(kù)。
2、RogueWave Standard C++ Library
參考站點(diǎn):http://www.roguewave.com/這個(gè)庫(kù)在Borland C++ Builder的早期版本中曾經(jīng)被采用,后來(lái)被其他的庫(kù)給替換了。筆者不推薦使用。
3、SGI STL
參考站點(diǎn):http://www.roguewave.com/SGI公司的C++標(biāo)準(zhǔn)模版庫(kù)。
4、STLport
參考站點(diǎn):http://www.stlport.org/SGI STL庫(kù)的跨平臺(tái)可移植版本。
也就是說(shuō),隨便你拿起哪本C++書(shū)籍(包括很多被人們廣泛稱(chēng)為“必讀經(jīng)典”的),那么有很大的可能這本書(shū)中的內(nèi)容不是你應(yīng)該學(xué)的,而是你不應(yīng)該學(xué)的。我之所以這么說(shuō)有兩個(gè)原因,因?yàn)橐唬以?jīng)是受害者。二,也是更實(shí)質(zhì)性的原因,這些所謂的必讀經(jīng)典,充斥的是介紹C++中的陷阱和對(duì)于C++的缺陷的各種workarounds(好聽(tīng)一點(diǎn)叫Idioms(慣用法)或techniques(技術(shù)));
又因?yàn)?FONT>C++中的這類(lèi)陷阱和缺陷實(shí)在數(shù)不勝數(shù),所以就拉出了一個(gè)“長(zhǎng)尾”;這類(lèi)書(shū)籍在所有語(yǔ)言中都存在(“C++標(biāo)準(zhǔn)庫(kù)缺陷和陷阱”、“Effective Java”、“Effective C#”等等),然而在C++里面這個(gè)尾巴特別長(zhǎng),導(dǎo)致這類(lèi)書(shū)數(shù)不勝數(shù)。
三,這些書(shū)中列出來(lái)的缺陷和陷阱根本不區(qū)分常見(jiàn)程度,對(duì)于一個(gè)用本程序員來(lái)說(shuō),應(yīng)該希望看到“從最常見(jiàn)的問(wèn)題到最不常見(jiàn)的問(wèn)題”這樣的順序來(lái)羅列內(nèi)容,然而這些書(shū)里面要么全部混在一起,要么按照“資源管理、類(lèi)設(shè)計(jì)、泛型”這樣的技術(shù)分類(lèi)來(lái)介紹內(nèi)容。
這根本毫無(wú)幫助(如果我看到一個(gè)章節(jié)的內(nèi)容,我當(dāng)然知道它講的是類(lèi)設(shè)計(jì)還是資源管理,還用廢話(huà)么?),使得一個(gè)學(xué)習(xí)者無(wú)法辨別并將最重要的時(shí)間花在最常見(jiàn)的問(wèn)題之上。 #t#
最最關(guān)鍵的是:這些書(shū)當(dāng)中介紹的內(nèi)容與成為一個(gè)好程序員根本毫無(wú)關(guān)系,它們頂多只能告訴你——嗨,小心跌入這個(gè)陷阱。或者告訴你——嗨,你知道當(dāng)你(八輩子都不一定遇到)遇到這個(gè)需求的時(shí)候,可以通過(guò)這個(gè)技巧來(lái)得以解決嗎?
結(jié)果讀了一本又一本之后,你腦袋里除了塞滿(mǎn)了“禁止”、“警戒”、“燈泡”符號(hào)之外,真正的編程素質(zhì)卻是一無(wú)長(zhǎng)進(jìn)。又或者有這樣一類(lèi)書(shū),熱衷于解釋語(yǔ)言實(shí)現(xiàn)背后的機(jī)制,然而語(yǔ)言特性本質(zhì)上是干嘛用的?是用來(lái)在實(shí)際編碼中進(jìn)行抽象的(說(shuō)得好聽(tīng)一點(diǎn)就是“設(shè)計(jì)”),不是用來(lái)告訴你這個(gè)特性是怎么支持的。比如我就見(jiàn)過(guò)以下的情景:面試官問(wèn):“你知道虛函數(shù)嗎?”得到的回答是一堆關(guān)于虛函數(shù)表機(jī)制的解釋。
面試官又問(wèn):“那虛函數(shù)的好處是什么呢?”到底為什么要虛函數(shù)呢?C++標(biāo)準(zhǔn)庫(kù)得到的回答是:“恩…啊…就是…多態(tài)吧”(這時(shí)已經(jīng)覺(jué)得回答不夠深刻了)。再問(wèn):“那多態(tài)是干嘛的呢?”啞口無(wú)言。