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