《Effective STL中文版》前言
我第一次寫關於STL(Standard TemplateLibrary,標準模板庫)的介紹是在1995
年,當時我在More Effective C++的最後一個條款中對STL
做了粗略的介紹。此後不久,我就陸續收到一些電子郵件,詢問我什麼時候開始寫Effective STL。
有好幾年時間我一直在拒絕這種念頭。剛開始的時候,我對STL
並不非常熟悉,根本不足以提供任何關於STL 的建議。但是隨著時間的推移,以及我的經驗的增長,我的想法開始有了變化。毫無疑問,STL
庫代表了程式效率和擴充性設計方面的一個突破,但是當我開始真正使用STL
的時候,卻發現了許多我原來不可能注意到的實際問題。除了最簡單的STL
程式以外,要想移植一個稍微複雜一點的STL 程式都會面臨各種各樣的問題,這不僅僅是因為STL
庫實現有各自的特殊之處,而且也是因為底層的編譯器對於模板的支援各不相同——有的支援非常好,但有的卻非常差。要獲得STL
的正確指南並不容易,所以,學習“STL 的編程方式”非常困難,即使在克服了這個階段的障礙之後,你要想找到一份既容易理解又描述精確的參考文檔仍然是一大困難。可能最沮喪的是,即使一個小小的STL
用法錯誤,也常常會導致一大堆的編譯器診斷資訊,而且每一條診斷資訊都可能有上千個字元長,並且大多數會引用到一些在原始碼中根本沒有提到的類、函數或者模板(幾乎都很難理解)。儘管我對STL
讚賞有加,並且對STL 背後的人們更是欽佩無比,但是要向從事實際開發工作的程式員推薦STL
卻感到非常不舒服。因為,我自己並不確定要有效地使用STL
是否是可能的。
然後,我開始注意到了一些讓我非常驚訝的事情。儘管STL
存在可移植性問題,儘管它的文檔並不完整,儘管編譯器的診斷資訊有如傳輸線上的雜訊一樣,但是,我的許多諮詢客戶正在使用STL。而且,他們並不只是把STL
拿來玩一玩,而是在用它開發實際的產品。這是一個很重要的啟示。過去我知道STL
是一個設計非常考究的模板庫,這時我逐漸感覺到,既然程式員們願意忍受移植性的麻煩、不夠完整的文檔及難以理解的錯誤訊息,那麼這個庫除了良好的設計以外,一定還有其他更多的優勢。隨著專業程式員的數量越來越多,我意識到,即使是一個很差的STL
實現,也勝過沒有實現。
更進一步,我知道STL
的境況正在好轉。C++庫和編譯器越來越多地遵從C++標準,好的文檔也開始出現了,而且編譯器的診斷資訊也在改進。因此我決定投身到這場STL
運動中,盡我的一份微薄之力。本書就是我努力的結果:50
條有效使用STL 的經驗。
我原來的計劃是在1999
年的下半年寫作本書,腦子裡一直是這樣想的,並且也有了一個提綱。但後來我改變了路線。我擱下了本書的寫作,而去開發一門有關STL
的引導性培訓課程,並且也教授了幾組程式員。大約一年以後,我又回到這本書的寫作上,並根據培訓課程中積累的經驗重新修訂了本書的提綱。就如同Effective C++成功地以實際程式員所面臨的問題為基礎一樣,我希望本書也以類似的方式來面對STL
編程過程中的各種實際問題,特別是那些對於專業開發人員尤為重要的實際問題。
本文節選自《Effective STL中文版》一書
潘愛民 陳銘 鄒開紅
著
電子工業出版社出版