天天看點

《Effective STL中文版》前言

《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中文版》一書

潘愛民 陳銘 鄒開紅著

電子工業出版社出版

繼續閱讀