Boost程序庫完全開發指南︰深入C++ “準”標準庫

Boost程序庫完全開發指南︰深入C++ “準”標準庫
定價:474
NT $ 474
  • 作者:羅劍鋒
  • 出版社:電子工業出版社
  • 出版日期:2011-04-01
  • 語言:簡體中文
  • ISBN10:7121115778
  • ISBN13:9787121115776
  • 裝訂:平裝 / 577頁 / 普通級 / 單色印刷 / 初版
 

內容簡介

Boost是一個功能強大、構造精巧、跨平台、開源並且完全免費的C++ 程序庫,有著“C++‘準’標準庫”的美譽。

它由C++標準委員會部分成員所設立的Boost社區開發並維護,使用了許多現代C++編程技術,內容涵蓋字符串處理、正則表達式、容器與數據結構、並發編程、函數式編程、泛型編程、設計模式實現等許多領域,極大地豐富了C++的功能和表現力,能夠使C++軟件開發更加簡潔、優雅、靈活和高效。

本書基于Boost1.42版,介紹了其中的所有99個庫,並且詳細深入地講解了其中數十個庫,同時實現了若干頗具實用價值的工具類和函數,可幫助讀者迅速理解掌握Boost的用法以及在實際應用開發工作中。

本書內容豐富、結構嚴謹、詳略得當、講解透徹,帶領讀者領略了C++ 的最新前沿技術,相信會是每位C++程序員的必備工具書。
 

目錄

第0章 導讀
第1章 Boost程序庫總論
第2章 時間與日期
第3章 內存管理
第4章 實用工具
第5章 字符串與文本處理
第6章 正確性與測試
第7章 容器與數據結構
第8章 算法
第9章 數學與數字
第10章 操作系統相關
第11章 函數與回調
第12章 並發編程
第13章 編程語言支持
第14章 其他Boost組件
第15章 Boost與設計模式
第16章 結束語
附錄A 推薦書目
附錄B 網絡資源
附錄C C++標準簡述
附錄D STL簡述
附錄E ref_array實現代碼
 

最近一年我電話而試了數十位c++應聘者,慣用的暖場問題是“工作中使用過STL的哪些組件?使用過Boost的哪些組件?”。得到的答案大多集中在vector、map和shared_ptro如果對方是在校學生,我一般會問問vector或map的內部實現、各種操作的復雜度以及迭代器失效的可能場景。如果是有經驗的程序員,我還會追問shared_ptr的線程安全性、循環引用的後果及如何避免、weak_ptr的作用等。如果這些都回答得不錯,進一步還可以問問如何實現線程安全的引用計數,如何定制刪除動作等等。這些問題讓我能迅速辨別對辦的c++水平。

我之所以在面試時問到Boost,是因為其中的許多組件確實可以用丁.編寫可維護的產品代碼。Boost包含近百個程序庫,其中不乏具有工程實用價值的佳品。每個人口味與技術背景不,樣,對Boost的取舍也不一樣。就我的個人經驗而言,首先可以使用絕對無害的庫,例如noncopyable、scoped—ptr、static—assert等,這些庫的學習和使用都比較簡單,容易入手。其次,有些功能自己實現起來並不困難,正好Boost里提供了現成的代碼,那就不妨一用,比如date一time和circular__ buffer等。然後,在新項目中,對于消息傳遞和資源管理可以考慮采用更加現代的方式,例如用function/bind在某些情況下代替虛函數作為庫的回調接口、借助shared_ptr實現線程安全的對象回調等等。這二者會影響整個程序的設計思路與風格,需要通盤考慮,如果正確使用智能指針,在現代c++程序里一般不需要出現delete語句。最後,對某些性能不佳的庫保持警惕,比如lexical—cast。總之,在項目組成員人人都能理解並運用的基礎上,適當引入現成的Boost組件,以減少重復勞動,提高生產力。

Boost是一個寶庫,其中既有可以直接拿來用的代碼,也有值得借鑒的設計思路。試舉一例︰正則表達式庫regex對線程安全的處理。

早期的RegEx類不是線程安全的,它把“正則表達式”和“匹配動作”放到了一個類里邊。由于有可變數據,RegEx的對象不能跨線程使用。如今的regex明確地區分了不可變(immutable)與可變(mutable)的數據,前者可以安全地跨線程共享,後者則不行。比如正則表達式本身(basic_regex) 與一次匹配的結果(match_results)是不可變的;而匹配動作本身(match_regex)涉及狀態更新,是可變的,于是用可重入的函數將其封裝起來,不讓這些數據泄露給別的線程。正是由于做了這樣合理的區分,regex在正常使用時就不必加鎖。

Donald Knuth在“Coders at Work”一書里表達了這樣一個觀點︰如果程序員的工作就是擺弄參數去調用現成的庫,而不知道這些庫是如何實現的,那麼這份職業就沒啥樂趣可言。換句話說,固然我們強調工作中不要重新發明輪子,但是作為一個合格的程序員,應該具備H制輪予的能力。非不能也,是不為也。

c/c++語言的‧大特點是其標準庫可以用語言自身實現。c標準庫的strlen、strcpy、strcmp系列函數是教學與練習的好題材,c++標準庫的complex、string、vector則是類、資源管理、模板編程的絕佳示範。在深入了解STL的實現之後,運用STL自然手到擒來,並能自動避免一些錯誤和低效的用法。

對于Boost也是如此,為了消除使用時的疑慮,為了用得更順手,有時我們需要適當了解其內部實現,甚至編寫簡化版用作對比驗證。但是由于Boost代碼用到了日常應用程序開發中不常見的高級語法和技巧,並且為了跨多個平台和編譯器而大量使用了預處理宏,閱讀Boost源碼並不輕松愜意,需要下一番功夫。另…方面,如果沉迷丁.這些有趣的底層細節而忘了原本要解決什麼問題,恐怕就舍本逐末了。

……
網路書店 類別 折扣 價格
  1. 新書
    $474