C++標準庫很大,非常大。難以置信的大。怎麼個大法?這麼說吧:在C++標準中,關於標準庫的規格說明佔了密密麻麻300多頁,這還不包括標準C庫,後者只是 “作為參考 ”包含在C++庫中。當然,標準庫並非總是越大越好,但在現在的情況下,確實越大越好,因為大的庫會包含大量的功能。標準庫中的功能越多,開發自己的應用程式時能藉助的功能就越多。C++庫並非提供了一切(很明顯的是,沒有提供並發和圖形使用者介面的支援),但確實提供了很多。幾乎任何事你都可以求助於它。
在歸納標準庫中有些什麼之前,需要介紹一下它是如何組織的。因為標準庫中東西如此之多,你(使用者)所選擇的類名或函數名就很有可能和標準庫中的某個名字相同。為了避免這種情況所造成的名字衝突,實際上標準庫中的一切都被放在名字空間std中。但這帶來了一個新問題。無數現有的C++代碼都依賴於使用了多年的偽標準庫中的功能,例如,聲明在 <iostream.h> , <complex.h> , <limits.h> 等標頭檔中的功能。現有軟體沒有針對使用名字空間而進行設計,如果用std來封裝標準庫導致現有代碼不能用,將是一種可恥行為。(這種釜底抽薪的做法會讓現有代碼的程式員說出比 "可恥 " 更難聽的話)懾於被激怒的程式員會產生的破壞力,標準委員會決定為封裝了std的那部分標準庫構件建立新的標頭檔名。產生新標頭檔的方法僅僅是將現有C++標頭檔名中的.h去掉。所以 <iostream.h> 變成了 <iostream> , <complex.h> 變成了 <complex> ,等等。對於C標頭檔,採用同樣的方法,但在每個名字前還要添加一個c。所以C的 <string.h> 變成了 <cstring> , <stdio.h> 變成了 <cstdio> ,等等。
最後一點是,舊的C++標頭檔是官方所反對使用的(即,明確列出不再支援),但舊的C標頭檔則沒有(以保持對C的相容性)。實際上,編譯器製造商不會停止對客戶現有軟體提供支援,所以可以預計,舊的C++標頭檔在未來幾年內還是會被支援。所以,實際來說,下面是C++標頭檔的現狀: 舊的C++標頭檔名如 <iostream.h> 將會繼續被支援,儘管它們不在官方標準中。這些標頭檔的內容不在名字空間std中。新的C++標頭檔如 <iostream> 包含的準系統和對應的舊標頭檔相同,但標頭檔的內容在名字空間std中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔和新標頭檔中的實體不一定完全對應。)標準C標頭檔如 <stdio.h> 繼續被支援。標頭檔的內容不在std中。具有C 庫功能的新C++標頭檔具有如 <cstdio> 這樣的名字。它們提供的內容和相應的舊C標頭檔相同,只是內容在std 中。所有這些初看有點怪,但不難習慣它。最大的挑戰是把字串標頭檔理清楚: <string.h> 是舊的C標頭檔,對應的是基於char*的字串處理函數; <string>是封裝了std 的C++標頭檔,對應的是新的string類(看下文); <cstring> 是對應於舊C標頭檔的std版本。如果能掌握這些(我相信你能),其餘的也就容易了。