編輯推薦
C++語言之父的經典名著新版本,全麵掌握標準C++11及其編程技術的指南!
內容簡介
本書是C++領域經典的參考書,介紹瞭C++11的各項新特性、功能等。主要內容包括:C++的類型、對象、作用域、存儲、計算基礎及模塊化知識、命名空間、源文件以及異常處理等;C++的抽象性,包括類、類繼承、模版等;標準庫,包括容器、算法、迭代器、字符串、流I/O以及C++的基本內存模型等。
目錄
第一部分 介紹 1
第1章 緻讀者 3
第2章 C++概覽:基本特性 37
第3章 C++概覽:抽象機製 59
第4章 C++概覽:容器和算法 87
第5章 C++概覽:並發和工具 111
第二部分 基本特性 133
第6章 類型和聲明 135
第7章 指針、數組和引用 171
第8章 結構、聯閤和枚舉 201
第9章 語句 225
第10章 錶達式 241
第11章 其他操作選講 273
第12章 函數 305
第13章 異常處理 343
第14章 命名空間 389
第15章 源文件和程序 419
第三部分 抽象機製 447
第16章 類 449
第17章 構造、清理、拷貝和移動 481
第18章 重載 527
第19章 特殊運算符 549
第20章 派生類 577
第21章 類層次 613
第22章 運行時類型信息 641
第23章 模闆 665
第24章 泛型程序設計 699
第25章 特例化 721
第26章 實例化 741
第27章 模闆和層次 759
第28章 元程序設計 779
第29章 一個矩陣設計 827
第四部分 標準庫 857
第30章 標準庫概覽 859
第31章 STL容器 885
第32章 STL算法 927
第33章 STL迭代器 953
第34章 內存和資源 973
第35章 工具 1009
第36章 字符串 1033
第37章 正則錶達式 1051
第38章 I/O流 1073
第39章 區域設置 1109
第40章 數值 1159
第41章 並發 1191
第42章 綫程和任務 1209
第43章 C標準庫 1253
第44章 兼容性 1267
Contents
Part I: Introductory Material
1. Notes to the Reader ... 3
2. A Tour of C++: The Basics . 37
3. A Tour of C++: Abstraction Mechanisms ... 59
4. A Tour of C++: Containers and Algorithms ... 87
5. A Tour of C++: Concurrency and Utilities . 111
Part II: Basic Facilities 133 133
6. Types and Declarations ... 135
7. Pointers, Arrays, and References 171
8. Structures, Unions, and Enumerations 201
9. Statements ... 225
10. Expressions ... 241
11. Select Operations 273
12. Functions . 305
13. Exception Handling 343
14. Namespaces . 389
15. Source Files and Programs .. 419
Part III: Abstraction Mechanisms 447 447
16. Classes .. 449
17. Construction, Cleanup, Copy, and Move 481
18. Overloading .. 527
19. Special Operators 549
20. Derived Classes 577
21. Class Hierarchies ... 613
22. Run-Time Type Information . 641
23. Templates .. 665
24. Generic Programming . 699
25. Specialization ... 721
26. Instantiation 741
27. Templates and Hierarchies ... 759
28. Metaprogramming . 779
29. A Matrix Design . 827
Part IV: The Standard Library 857
30. Standard Library Summary . 859
31. STL Containers .. 885
32. STL Algorithms . 927
33. STL Iterators . 953
34. Memory and Resources .. 973
35. Utilities .. 1009
36. Strings .. 1033
37. Regular Expressions ... 1051
38. I/O Streams .. 1073
39. Locales .. 1109
40. Numerics .. 1159
41. Concurrency ... 1191
42. Threads and Tasks 1209
43. The C Standard Library .. 1253
44. Compatibility 1267
由於篇幅很長,本書影印版分為兩冊。原書第1~3部分為上冊,第4部分為下冊。—編輯注
前言/序言
前 言 所有計算機科學問題都可以通過引入一個新的間接層次來解決,那些已有過多間接層次的問題除外。 —David J. Wheeler與C++98標準相比,C++11標準令我可以更清晰、更簡潔而且更直接地錶達我的想法。而且,新版本的編譯器可以對程序進行更好的檢查並生成更快的目標程序。因此,C++11給人的感覺就像是一種新語言一樣。 在本書中,我追求完整性(completeness)。我會介紹專業程序員可能需要的每個語言特性和標準庫組件。對每個特性或組件,我將給齣: · 基本原理:設計這個特性(組件)是為瞭幫助解決哪類問題?在其設計之下的原理是什麼?它有什麼根本的局限?· 規範:它該如何定義?我將以專業程序員為目標讀者來選擇內容的詳略程度,對於要求更高的C++語言研究者,有很多ISO標準的文獻可供查閱。 · 例子:當單獨使用這個特性或與其他特性組閤使用時,如何用好它?其中的關鍵技術和習慣用法是怎樣的?在程序的可維護性和性能方麵是否有一些隱含的問題?多年來,無論是C++語言本身還是它的使用,都已經發生瞭巨大改變。從程序員的角度,大多數改變都屬於語言的改進。與之前的版本相比,當前的ISO C++標準(ISO/IEC 14882-2011,通常稱為C++11)在編寫高質量代碼方麵無疑是一個好得多的工具。但是它好在哪裏?現代C++語言支持什麼樣的程序設計風格和技術?這些技術靠哪些語言特性和標準庫特性來支撐?精煉、正確、可維護性好、性能高的C++代碼的基本構建單元是怎樣的?本書將迴答這些關鍵問題。很多答案已經不同於1985、1995或2005等舊版本的C++語言瞭:C++在進步。 C++是一種通用程序設計語言,它強調富類型輕量級抽象的設計和使用。C++特彆適閤開發資源受限的應用,例如可在軟件基礎設施中發現的那些應用。那些花費時間學習高質量代碼編寫技術的程序員將會從C++語言受益良多。C++是為那些嚴肅對待編程的人而設計的。人類文明已經嚴重依賴軟件,編寫高質量的軟件非常重要。 目前已經部署的C++代碼達到數十億行,因此程序穩定性備受重視—很多1985年和1995年編寫的C++代碼仍然運行良好,而且還會繼續運行幾十年。但是,對所有這些應用程序,都可以用現代C++語言寫齣更好的版本;如果你墨守陳規,將來寫齣的代碼將會是低質量、低性能的。對穩定性的強調還意味著,你現在遵循標準寫齣的代碼,在未來幾十年中會運行良好。本書中所有代碼都遵循2011 ISO C++標準。 本書麵嚮三類讀者: · 想知道最新的2011 ISO C++標準都提供瞭哪些新特性的C++程序員。 · 好奇C++到底提供瞭哪些超越C語言的特性的C程序員。 · 具備Java、C#、Python和Ruby等編程語言背景,正在探尋“更接近機器”的語言,即更靈活、提供更好的編譯時檢查或是更好性能的語言的程序員。 自然,這三類讀者可能是有交集的—一個專業軟件開發者通常掌握多門編程語言。 本書假定目標讀者是程序員。如果你提問“什麼是for循環?”或是“什麼是編譯器?”,那麼本書現在還不適閤你,我嚮你推薦我的另一本書《C++程序設計原理與實踐》,這本書適閤作為程序設計和C++語言的入門書籍。而且,我假定讀者是較為成熟的軟件開發者。如果你提問“為什麼要費力進行測試?”或是“所有語言基本都是一樣的,給我看語法就可以瞭”,或者確信存在一種適閤所有任務的完美語言,那麼本書也不適閤你。 相對於C++98,C++11提齣瞭哪些改進和新特性呢?適閤現代計算機的機器模型會涉及到大量並發處理。為此,C++11提供瞭用於係統級並行編程(如使用多核)的語言和標準庫特性。C++11還提供瞭正則錶達式處理、資源管理指針、隨機數、改進的容器(包括哈希錶)以及其他很多特性。此外,C++11還提供瞭通用和一緻的初始化機製、更簡單的for語句、移動語義、基礎的Unicode支持、lambda、通用常量錶達式、控製類缺省定義的能力、可變參數模闆、用戶定義的字麵值常量和其他很多新特性。請記住,這些標準庫和語言特性的目標就是支撐那些用來開發高質量軟件的程序設計技術。這些特性應該組閤使用—將它們看作蓋大樓的磚,而不應該相互隔離地單獨使用來解決特定問題。計算機是一種通用機器,而C++在其中起到瞭重要作用。特彆是,C++的設計目標就是足夠靈活和通用,以便處理那些連它的設計者都未曾想象的未來的難題。 緻謝除瞭本書上一版緻謝提及的人之外,我還要感謝Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。沒有他們的幫助,本書的質量要差得多。 感謝Howard Hinnant為我解答很多有關標準庫的問題。 Andrew Sutton是Origin庫的作者,模闆相關章節中很多模擬概念的討論都是基於這個測試平颱的。他還是矩陣庫的作者,這是第29章的主題。Origin庫是開源的,在互聯網上搜索“Origin”和“Andrew Sutton”就能找到。 感謝我指導的研究生畢業設計班,他們從“導學章節”中找齣的問題比其他任何人都多。 假如我能遵照審閱人的所有建議,毫無疑問會大幅度提高本書的質量,但篇幅上也會增加數百頁。每個專傢審閱人都建議增加技術細節、進階示例和很多有用的開發規範;每個新手審閱人(或教育工作者)都建議增加示例;而大多數審閱人都(正確地)注意到本書的篇幅可能過長瞭。 感謝普林斯頓大學計算機科學係,特彆感謝Brian Kernighan教授,在我利用部分休假時間撰寫此書時給予我熱情接待。 感謝劍橋大學計算機實驗室,特彆感謝Andy Hopper教授,在我利用部分休假時間撰寫此書時給予我熱情接待。 感謝我的編輯Peter Gordon以及他在Addison-Wesley的齣版團隊,感謝你們的幫助和耐心。 Bjarne Stroustrup於得剋薩斯大學城第3版前言去編程就是去理解。 —Kristen Nyggard我覺得用C++ 編程比以往更令人感到愉快。在過去這些年裏,C++ 在支持設計和編程方麵取得瞭令人振奮的進步,針對其使用的大量新技術已經被開發齣來瞭。然而,C++ 並不隻是好玩。普通的實際程序員在幾乎所有種類和規模的開發項目上,在生産率、可維護性、靈活性和質量方麵都取得瞭顯著的進步。到今天為止,C++ 已經實現瞭我當初對它的期望中的絕大部分,還在許多我原來根本沒有夢想過的工作中取得瞭成功。 本書介紹的是標準C++以及由C++所支持的關鍵性編程技術和設計技術。與本書第1版所介紹的那個C++ 版本相比,標準C++是一個經過瞭更仔細推敲的更強大的語言。各種新的語言特徵,如名字空間、異常、模闆,以及運行時類型識彆,使人能以比過去更直接的方式使用許多技術,標準庫使程序員能夠從比基本語言高得多的層麵上起步。 本書第2版中大約有三分之一的內容來自第1版。這個第3版則是重寫瞭比例更大的篇幅的結果。它提供的許多東西是大部分有經驗的程序員也需要的,與此同時,本書也比它的以前版本更容易供新手入門。C++ 使用的爆炸性增長和作為其結果的海量經驗積纍使這些成為可能。 一個功能廣泛的標準庫定義使我能以一種與以前不同的方式介紹C++ 的各種概念。與過去一樣,本書對C++ 的介紹與任何特定的實現都沒有關係;與過去一樣,教材式的各章還是采用“自下而上”的方式,使每種結構都是在定義之後纔使用。無論如何,使用一個設計良好的庫遠比理解其實現細節容易得多。由於這些情況,在假定讀者已經理解瞭標準庫的內部工作原理之前,就可以利用它提供許多更實際、更有趣的例子。標準庫本身也是程序設計實例和設計技術的豐富源泉。 本書將介紹每種主要的C++ 語言特徵和這個標準庫,它是圍繞著語言和庫功能組織起來的。當然,各種特徵都將在使用它們的環境中介紹。也就是說,這裏所關注的是將語言作為一種設計和編程的工具,而不是語言本身。本書將展示那些使C++ 卓有成效的關鍵性技術,講述為掌握它們所需要的那些基本概念。除瞭專門闡釋技術細節的那些地方之外,其他示例都取自係統軟件領域。另一本與本書配套齣版的書《帶標注的C++ 語言標準》(The Annotated C++ Language Standard),將給齣完整的語言定義,所附標注能使它更容易理解。 本書的基本目標就是幫助讀者理解C++ 所提供的功能將如何支持關鍵性的程序設計技術。這裏的目標是使讀者能遠遠超越簡單地復製示例並使之能夠運行,或者模仿來自其他語言的程序設計風格。隻有對隱藏在語言背後的思想有瞭很好的理解之後,纔能真正掌握這個語言。如果有一些具體實現的文檔的輔助,這裏所提供的信息就足以對付具有挑戰性的真實世界中的重要項目。我的希望是,本書能幫助讀者獲得新的洞察力,使他們成為更好的程序員和設計師。 緻謝除瞭第1版和第2版的緻謝中所提到的那些人之外,我還要感謝Matt Austern、Hans Boehm、Don Caldwell、Lawrence Crowl、Alan Feuer、Andrew Forrest、David Gay、Tim Griffin、Peter Juhl、Brian Kernighan、Andrew Koenig、Mike Mowbray、Rob Murray、Lee Nackman、Joseph Newcomer、Alex Stepanov、David Vandevoorde、Peter Weinberger和Chris Van Wyk,他們對第3版各章的初稿提齣瞭許多意見。沒有他們的幫助和建議,這本書一定會更難理解,包含更多的錯誤,沒有這麼完全,當然也可能稍微短一點。 我還要感謝C++ 標準化委員會的誌願者們,是他們完成瞭規模宏大的建設性工作,纔使C++ 具有它今天這個樣子。要羅列齣每個人會有一點不公平,但一個也不提就更不公平,所以我想特彆提及Mike Ball、Dag Brück、Sean Corfield、Ted Goldstein、Kim Knuttila、Andrew Koenig、José Lajoie、Dmitry Lenkov、Nathan Myers、Martin O’Riordan、Tom Plum、Jonathan Shopiro、John Spicer、Jerry Schwarz、Alex Stepanov和Mike Vilot,他們中的每個人都在C++及其標準庫的某些方麵直接與我閤作過。 在這本書第一次印刷之後,許多人給我發來電子郵件,提齣更正和建議。我已經在原書的結構裏響應瞭他們的建議,使後來齣版的版本大為改善。將本書翻譯到各種語言的譯者也提供瞭許多澄清性的意見。作為對這些讀者的迴應,我增加瞭附錄D和附錄E。讓我藉這個機會感謝他們之中特彆有幫助的幾位:Dave Abrahams、Matt Austern、Jan Bielawski、Janina Mincer Daszkiewicz、Andrew Koenig、Dietmar Kühl、Nicolai Josuttis、Nathan Myers、Paul E. Sevinc、Andy Tenne-Sens、Shoichi Uchida、Ping-Fai(Mike) Yang和Dennis Yelle。 Bjarne Stroustrup於新澤西默裏山第2版前言前路漫漫。 —Bilbo Baggins正如在本書的第1版中所承諾的,C++ 為滿足其用戶的需要正在不斷地演化。這一演化過程得益於許多有著極大的背景差異,在範圍廣泛的應用領域中工作的用戶們的實際經驗的指導。在第1版齣版後的六年中,C++ 的用戶群體擴大瞭不止百倍,人們學到瞭許多東西,發現瞭許多新技術並通過瞭實踐的檢驗。這些技術中的一些也在這一版中有所反映。 在過去六年裏所完成的許多語言擴展,其基本宗旨就是將C++ 提升為一種服務於一般性的數據抽象和麵嚮對象程序設計的語言,特彆是提升為一個可編寫高質量的用戶定義類型庫的工具。一個“高質量的庫”是指這樣的庫,它以一個或幾個方便、安全且高效的類的形式,給用戶提供瞭一個概念。在這個環境中,安全意味著這個類在庫的使用者與它的供方之間構成瞭一個特殊的類型安全的界麵;高效意味著與手工寫齣的C代碼相比,這種庫的使用不會給用戶強加明顯的運行時間上或空間上的額外開銷。 本書介紹的是完整的C++ 語言。從第1章到第10章是一個教材式的導引,第11章到第13章展現的是一個有關設計和軟件開發問題的討論,最後包含瞭完整的C++ 參考手冊。自然,在原來版本之後新加入的特徵和變化已成為這個展示的有機組成部分。這些特徵包括:經過精化後的重載解析規則和存儲管理功能,以及訪問控製機製、類型安全的連接、const和static成員函數、抽象類、多重繼承、模闆和異常處理。 C++ 是一個通用的程序設計語言,其核心應用領域是最廣泛意義上的係統程序設計。此外,C++ 還被成功地用到許多無法稱為係統程序設計的應用領域中。從最摩登的小型計算機到最大的超級計算機上,以及幾乎所有操作係統上都有C++ 的實現。因此,本書描述的是C++ 語言本身,並不想試著去解釋任何特殊的實現、程序設計環境或者庫。 本書中給齣的許多類的示例雖然都很有用,但也還是應該歸到“玩具”一類。與在完整的精益求精的程序中做解釋相比,這裏所采用的解說風格能更清晰地呈現那些具有普遍意義的原理和極其有用的技術,在實際例子中它們很容易被細節所淹沒。這裏給齣的大部分有用的類,如鏈接錶、數組、字符串、矩陣、圖形類、關聯數組等,在廣泛可用的各種商品和非商品資源中,都有可用的“防彈”和/或“金盤”版本。那些“具有工業強度”的類和庫中的許多東西,實際上不過是在這裏可以找到的玩具版本的直接或間接後裔。 與第1版相比,這一版更加強調本書在教學方麵的作用。然而,這裏的敘述仍然是針對有經驗的程序員,並努力不去輕視他們的智慧和經驗。有關設計問題的討論有瞭很大的擴充,作為對讀者在語言特徵及其直接應用之外的要求的一種迴應。技術細節和精確性也有所增強。特彆是,這裏的參考手冊錶現瞭在這個方嚮上多年的工作。我的目標是提供一本具有足夠深度的書籍,使大部分程序員能在多次閱讀中都有所收獲。換句話說
C++程序設計語言(第4部分:標準庫)(英文版 第4版) 下載 mobi epub pdf txt 電子書 格式