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++裡面這個尾巴特別長,導致這類書數不勝數。
三,這些書中列出來的缺陷和陷阱根本不區分常見程度,對於一個用本程序員來說,應該希望看到“從最常見的問題到最不常見的問題”這樣的順序來羅列內容,然而這些書裡面要麼全部混在一起,要麼按照“資源管理、類設計、泛型”這樣的技術分類來介紹內容。
這根本毫無幫助如果我看到一個章節的內容,我當然知道它講的是類設計還是資源管理,還用廢話麼?),使得一個學習者無法辨別並將最重要的時間花在最常見的問題之上。
最最關鍵的是:這些書當中介紹的內容與成為一個好程序員根本毫無關系,它們頂多只能告訴你——嗨,小心跌入這個陷阱。或者告訴你——嗨,你知道當你八輩子都不一定遇到)遇到這個需求的時候,可以通過這個技巧來得以解決嗎?
結果讀了一本又一本之後,你腦袋裡除了塞滿了“禁止”、“警戒”、“燈泡”符號之外,真正的編程素質卻是一無長進。又或者有這樣一類書,熱衷於解釋語言實現背後的機制,然而語言特性本質上是干嘛用的?是用來在實際編碼中進行抽象的說得好聽一點就是“設計”),不是用來告訴你這個特性是怎麼支持的。比如我就見過以下的情景:面試官問:“你知道虛函數嗎?”得到的回答是一堆關於虛函數表機制的解釋。
面試官又問:“那虛函數的好處是什麼呢?”到底為什麼要虛函數呢?C++標准庫得到的回答是:“恩…啊…就是…多態吧”這時已經覺得回答不夠深刻了)。再問:“那多態是干嘛的呢?”啞口無言。