1. 在設計原則上,STL和Boost大致統一
由於STL和Boost基本上都是標準委員會那批人在策劃、審覈和維護,因此口味上是相對接近的。
可是由於Boost並不在標準中,或者說是下一代標準的試驗場,因此庫的種類要更多一些,手法也更加豐富一些。
2. STL/Boost 針對 Developer 和 User 的要求不一樣
對於Boost開發者而言,強調的是代碼可讀、高效、強調元編程和編程技巧。程序員
補註:評論裏面果真有人提到說可讀性和元編程有矛盾。這種說法大概相似於「這段代碼可讀性差是由於業務太複雜」。這是不對的。可讀性是要創建在正確的知足功能和性能的基礎上的。這也是爲何我要特別爲後兩點解(Jiao)釋(Bian)一下。
這裏要解釋一下後兩點:編程
而STL由於處於標準中,因此會對不一樣平臺的編譯器都作出了統一要求,須要編譯器配合的地方,也不會用語言機制或者奇技淫巧來遷就,例如Static Assertion、Auto、decltype,在Boost當中是以必定的技巧實現的(由於編譯器不能直接支持),而在C++11種就變成了一個內置的語言特性。與此相似的還有不少的Type Traits。
對於User而言,Boost/STL的庫能夠分爲四種風格。網絡
由於STL多數是面向通常程序員,因此以第一種庫居多,而Boost包含了所有四類的庫的風格。
3. 文檔
Boost的文檔基本上是tutorial風格的,Reference作的並很差。而被標準化的STL一般會有更加清晰易讀的Reference。
4. 平臺特定性
Boost有不少支持不一樣平臺、或者IO相關的玩意兒,好比Boost.Process,GIL,ASIO,Context,哪一個都不是平臺無關的省油燈。反觀STL對這方面一直都很保守,以前一直就只有容器這類東西,C++11以後才把Thread、File System這種和平臺有些關係的內容陸續給弄進來,IO和網絡到如今都是一塊愛財如命的荒地。
5. 問題
Boost和STL的問題幾乎是相通的,就是由於模板使用多,編譯時間較長,二進制也相對較大。編譯錯誤也不是很是明確。Boost中一些元編程份量更多的庫,例如MSM和Spirit的問題要更加嚴重。
此外,由於Boost是試驗性質的庫,因此接口可能不是很是穩定。而一旦庫進入STL以後,就幾乎不可能有變化了。好比Boost.Filesystem在進入TR2以前,前後有三個比較大版本的API變更;Spirit也作出了一次比較大的調整。
還有就是,Boost的庫和其它語言的標準庫相比,零散雜亂,我常常也忘記Boost/STL中的某些庫,本身去發明了一個一點都很差用的輪子。
6. 乾兒子
最後就是,雖然Boost是標準委員會的乾兒子,可是也不保證它的實現就必定是進入STL。好比網絡庫,最後進標準的,應該是CppNetlib,而不是ASIO。函數
references:性能
http://www.zhihu.com/question/27558334設計