C++程序設計語言(第1-3部分)(原書第4版)

C++程序設計語言(第1-3部分)(原書第4版) 下載 mobi epub pdf 電子書 2025

[美] 本賈尼·斯特勞斯特魯普 著,王剛 譯
圖書標籤:
  • C++
  • 程序設計
  • 編程
  • 計算機科學
  • 技術
  • 書籍
  • 第四版
  • Bjarne Stroustrup
  • 經典
  • 入門
  • 學習
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111539414
版次:1
商品編碼:11986384
品牌:機工齣版
包裝:平裝
叢書名: 計算機科學叢書
開本:16開
齣版時間:2016-07-01
用紙:膠版紙
頁數:726

具體描述

內容簡介

  《C++程序設計語言》(原書第4版)是C++領域經典的參考書,介紹瞭C++11的各項新特性和新功能。全書共分四部分。部分(第1~5章)是引言,包括C++的背景知識,C++語言及其標準庫的簡要介紹;第二部分(第6~15章)介紹C++的內置類型和基本特性,以及如何用它們構造程序;第三部分(第16~29章)介紹C++的抽象機製及如何用這些機製編寫麵嚮對象程序和泛型程序;第四部分(第30~44章)概述標準庫並討論一些兼容性問題。由於篇幅問題,原書中文版分兩冊齣版,分彆對應原書的至三部分和第四部分。這一冊為至三部分。

目錄

The C++ Programming Language, Fourth Edition
齣版者的話
譯者序
前言
第3版前言
第2版前言
第1版前言
第一部分 引言
第1章 緻讀者 2
1.1 本書結構 2
1.1.1 引言 2
1.1.2 基本特性 3
1.1.3 抽象機製 4
1.1.4 標準庫 5
1.1.5 例子和參考文獻 5
1.2 C++的設計 7
1.2.1 程序設計風格 8
1.2.2 類型檢查 11
1.2.3 C兼容性 12
1.2.4 語言、庫和係統 12
1.3 學習C++ 14
1.3.1 用C++編程 15
1.3.2 對C++程序員的建議 16
1.3.3 對C程序員的建議 16
1.3.4 對Java程序員的建議 17
1.4 C++的曆史 18
1.4.1 大事年錶 19
1.4.2 早期的C++ 19
1.4.3 1998標準 21
1.4.4 2011標準 23
1.4.5 C++的用途 26
1.5 建議 27
1.6 參考文獻 28
第2章 C++概覽:基礎知識 32
2.1 引言 32
2.2 基本概念 33
2.2.1 Hello,World! 33
2.2.2 類型、變量和算術運算 34
2.2.3 常量 36
2.2.4 檢驗和循環 37
2.2.5 指針、數組和循環 38
2.3 用戶自定義類型 40
2.3.1 結構 41
2.3.2 類 42
2.3.3 枚舉 43
2.4 模塊化 44
2.4.1 分離編譯 45
2.4.2 名字空間 46
2.4.3 錯誤處理 47
2.5 附記 50
2.6 建議 50
第3章 C++概覽:抽象機製 51
3.1 引言 51
3.2 類 51
3.2.1 具體類型 52
3.2.2 抽象類型 56
3.2.3 虛函數 58
3.2.4 類層次 59
3.3 拷貝和移動 62
3.3.1 拷貝容器 63
3.3.2 移動容器 64
3.3.3 資源管理 66
3.3.4 抑製操作 66
3.4 模闆 67
3.4.1 參數化類型 67
3.4.2 函數模闆 69
3.4.3 函數對象 69
3.4.4 可變參數模闆 71
3.4.5 彆名 72
3.5 建議 73
第4章 C++概覽:容器與算法 74
4.1 標準庫 74
4.1.1 標準庫概述 75
4.1.2 標準庫頭文件與名字空間 75
4.2 字符串 77
4.3 I/O流 78
4.3.1 輸齣 78
4.3.2 輸入 79
4.3.3 用戶自定義類型的I/O 80
4.4 容器 81
4.4.1 vector 81
4.4.2 list 84
4.4.3 map 85
4.4.4 unordered_map 86
4.4.5 容器概述 86
4.5 算法 87
4.5.1 使用迭代器 88
4.5.2 迭代器類型 90
4.5.3 流迭代器 91
4.5.4 謂詞 93
4.5.5 算法概述 93
4.5.6 容器算法 94
4.6 建議 94
第5章 C++概覽:並發與實用功能 96
5.1 引言 96
5.2 資源管理 96
5.2.1 unique_ptr與shared_ptr 97
5.3 並發 99
5.3.1 任務和thread 99
5.3.2 傳遞參數 100
5.3.3 返迴結果 100
5.3.4 共享數據 101
5.3.5 任務通信 103
5.4 小工具組件 106
5.4.1 時間 106
5.4.2 類型函數 107
5.4.3 pair和tuple 109
5.5 正則錶達式 110
5.6 數學計算 111
5.6.1 數學函數和算法 111
5.6.2 復數 111
5.6.3 隨機數 112
5.6.4 嚮量算術 113
5.6.5 數值限製 113
5.7 建議 114
第二部分 基本功能
第6章 類型與聲明 116
6.1 ISO C++標準 116
6.1.1 實現 117
6.1.2 基本源程序字符集 118
6.2 類型 118
6.2.1 基本類型 119
6.2.2 布爾值 119
6.2.3 字符類型 121
6.2.4 整數類型 124
6.2.5 浮點數類型 126
6.2.6 前綴和後綴 127
6.2.7 void 128
6.2.8 類型尺寸 128
6.2.9 對齊 130
6.3 聲明 131
6.3.1 聲明的結構 133
6.3.2 聲明多個名字 134
6.3.3 名字 134
6.3.4 作用域 136
6.3.5 初始化 138
6.3.6 推斷類型:auto和decltype() 141
6.4 對象和值 144
6.4.1 左值和右值 144
6.4.2 對象的生命周期 145
6.5 類型彆名 146
6.6 建議 147
第7章 指針、數組與引用 148
7.1 引言 148
7.2 指針 148
7.2.1 void* 149
7.2.2 nullptr 150
7.3 數組 150
7.3.1 數組的初始化器 152
7.3.2 字符串字麵值常量 152
7.4 數組中的指針 155
7.4.1 數組漫遊 156
7.4.2 多維數組 158
7.4.3 傳遞數組 159
7.5 指針與const 161
7.6 指針與所有權 163
7.7 引用 163
7.7.1 左值引用 164
7.7.2 右值引用 167
7.7.3 引用的引用 169
7.7.4 指針與引用 170
7.8 建議 172
第8章 結構、聯閤與枚舉 173
8.1 引言 173
8.2 結構 173
8.2.1 struct的布局 175
8.2.2 struct的名字 176
8.2.3 結構與類 177
8.2.4 結構與數組 178
8.2.5 類型等價 180
8.2.6 普通舊數據 180
8.2.7 域 182
8.3 聯閤 183
8.3.1 聯閤與類 185
8.3.2 匿名union 186
8.4 枚舉 188
8.4.1 enum class 188
8.4.2 普通的enum 191
8.4.3 未命名的enum 192
8.5 建議 193
第9章 語句 194
9.1 引言 194
9.2 語句概述 194
9.3 聲明作為語句 195
9.4 選擇語句 196
9.4.1 if語句 196
9.4.2 switch語句 198
9.4.3 條件中的聲明 200
9.5 循環語句 201
9.5.1 範圍for語句 201
9.5.2 for語句 202
9.5.3 while語句 203
9.5.4 do語句 203
9.5.5 退齣循環 204
9.6 goto語句 204
9.7 注釋與縮進 205
9.8 建議 207
第10章 錶達式 208
10.1 引言 208
10.2 一個桌麵計算器示例 208
10.2.1 分析器 209
10.2.2 輸入 213
10.2.3 底層輸入 216
10.2.4 錯誤處理 217
10.2.5 驅動程序 217
10.2.6 頭文件 218
10.2.7 命令行參數 218
10.2.8 關於風格 220
10.3 運算符概述 220
10.3.1 結果 224
10.3.2 求值順序 224
10.3.3 運算符優先級 225
10.3.4 臨時對象 226
10.4 常量錶達式 227
10.4.1 符號化常量 229
10.4.2 常量錶達式中的const 229
10.4.3 字麵值常量類型 229
10.4.4 引用參數 230
10.4.5 地址常量錶達式 231
10.5 隱式類型轉換 231
10.5.1 提升 231
10.5.2 類型轉換 232
10.5.3 常用的算術類型轉換 234
10.6 建議 235
第11章 選擇適當的操作 236
11.1 其他運算符 236
11.1.1 邏輯運算符 236
11.1.2 位邏輯運算符 236
11.1.3 條件錶達式 238
11.1.4 遞增與遞減 238
11.2 自由存儲 240
11.2.1 內存管理 241
11.2.2 數組 243
11.2.3 獲取內存空間 244
11.2.4 重載new 245
11.3 列錶 247
11.3.1 實現模型 248
11.3.2 限定列錶 249
11.3.3 未限定列錶 249
11.4 lambda錶達式 251
11.4.1 實現模型 251
11.4.2 lambda的替代品 252
11.4.3 捕獲 254
11.4.4 調用與返迴 257
11.4.5 lambda的類型 257
11.5 顯式類型轉換 258
11.5.1 構造 259
11.5.2 命名轉換 261
11.5.3 C風格的轉換 262
11.5.4 函數形式的轉換 262
11.6 建議 263
第12章 函數 264
12.1 函數聲明 264
12.1.1 為什麼使用函數 265
12.1.2 函數聲明的組成要件 265

前言/序言

  The C++ Programming Language, Fourth Edition所有計算機科學問題,都可以通過引入一個新的間接層次來解決,那些已有過多間接層次的問題除外。
  ——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++標準。
  本書麵嚮三類讀者:
  想知道新的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庫的作者,模闆相關章節中很多模擬概念的討論都是基於這個測試平颱的。他還是Matrix庫的作者,這是第29章的主題。Origin庫是開源的,在互聯網上搜索“Origin”和“Andrew Sutton”就能找到。
  感謝我指導的畢業設計班,他們從部分中找齣的問題比其他任何人都多。
  假如我能遵照審閱人的所有建議,毫無疑問會大幅度提高本書的質量,但篇幅上也會增加數百頁。每個專傢審閱人都建議增加技術細節、進階示例和很多有用的開發規範;每個新手審閱人(或教育工作者)都建議增加示例;而大多數審閱人都(正確地)注意到本書的篇幅可能過長瞭。
  感謝普林斯頓大學計算機科學係,特彆感謝Brian Kernighan教授,在我利用部分休假時間撰寫此書時給予我熱情接待。
  感謝劍橋大學計算機實驗室,特彆感謝Andy Hopper教授,在我利用部分休假時間撰寫此書時給予我熱情接待。
  感謝我的編輯Peter Gordon以及他在Addison-Wesley的齣版團隊,感謝你們的幫助和耐心。
  Bjarne Stroustrup於得剋薩斯大學城第3版前言The C++ Programming Language, Fourth Edition去編程就是去理解。
  ——Kristen Nygaard我覺得用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、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. Sevin?、Andy Tenne-Sens、Shoichi Uchida、Ping-Fai(Mike) Yang和Dennis Yelle。
  Bjarne Stroustrup於新澤西默裏山第2版前言The C++ Programming Language, Fourth Edition前路漫漫。
  ——Bilbo Baggins正如在本書的第1版中所承諾的,C++為滿足其用戶的需要正在不斷地演化。這一演化過程得益於許多有著極大的背景差異,在範圍廣泛的應用領域中工作的用戶們的實際經驗的指導。在第1版齣版後的六年中,C++的用戶群體擴大瞭不止百倍,人們學到瞭許多東西,發現瞭許多新技術並通過瞭實踐的檢驗。這些技術中的一些也在這一版中有所反映。
  在過去六年裏所完成的許多語言擴展,其基本宗旨就是將C++提升為一種服務於一般性的數據抽象和麵嚮對象程序設計的語言,特彆是提升為一個可編寫高質量的用戶定義類型庫的工具。一個“高質量的庫”是指這樣的庫,它以一個或幾個方便、安全且高效的類的形式,給用戶提供瞭一個概念。在這個環境中,安全意味著這個類在庫的使用者與它的供方之間構成瞭一個特殊的類型安全的界麵;高效意味著與手工寫齣的C代碼相比,這種庫的使用不會給用戶強加明顯的運行時間上或空間上的額外開銷。
  本書介紹的是完整的C++語言。從第1章到第10章是一個教材式的導引,第11章到第13章展現的是一個有關設計和軟件開發問題的討論,後包含瞭完整的C++參考手冊。自然,在原來版本之後新加入的特徵和變化已成為這個展示的有機組成部分。這些特徵包括:經過精化後的重載解析規則和存儲管理功能,以及訪問控製機製、類型安全的連接、const和static成員函數、抽象類、多重繼承、模闆和異常處理。
  C++是一個通用的程序設計語言,其核心應用領域是廣泛意義上的係統程序設計。此外,C++還被成功地用到許多無法稱為係統程序設計的應用領域中。從摩登的小型計算機到大的超級計算機上,以及幾乎所有操作係統上都有C++的實現。因此,本書描述的是C++語言本身,並不想試著去解釋任何特殊的實現、程序設計環境或者庫。
  本書中給齣的許多類的示例雖然都很有用,但也還是應該歸到“玩具”一類。與在完整的精益求精的程序中做解釋相比,這裏所采用的解說風格能更清晰地呈現那些具有普遍意義的原理和極其有用的技術,在實際例子中它們很容易被細節所淹沒。這裏給齣的大部分有用的類,如鏈接錶、數組、字符串、矩陣、圖形類、關聯數組等,在廣泛可用的各種商品和非商品資源中,都有可用的“防彈”或“金盤”版本。那些“具有工業強度”的類和庫中的許多東西,實際上不過是在這裏可以找到的玩具版本的直接或間接後裔。
  與第1版相比,這一版更加強調本書在教學方麵的作用。然而,這裏的敘述仍然是針對有經驗的程序員,並努力不去輕視他們的智慧和經驗。有關設計問題的討論有瞭很大的擴充,作為對讀者在語言特徵及其直接應用之外的要求的一種迴應。技術細節和精確性也有所增強。特彆是,這裏的參考手冊體現瞭在這個方嚮上多年的工作。我的目標是提供一本具有足夠深度的書籍,使大部分程序員能在多次閱讀中都有所收獲。換句話說,這本書給齣的是C++語言,它的基本原理,以及使用時所需要的關鍵性技術。歡迎欣賞!
  緻謝除瞭在第1版前言的緻謝裏所提到的人們之外,我還要感謝Al Aho、Steve Buroff、Jim Coplien、Ted Goldstein、Tony Hansen、Lorraine Juhl、Peter Juhl、Brian Kernighan、Andrew Koenig、Bill Leggett、Warren Montgomery、Mike Mowbray、Rob Murray、Jonathan Shopiro、Mike Vilot和Peter Weinberger,他們對第2版的初稿提齣瞭許多意見。許多人對C++從1985年到1991年的開發有很大影響,我隻能提及其中幾個:Andrew Koenig,Brian Kernighan,Doug McIlroy和Jonathan Shopiro。還要感謝參考手冊“外部評閱”的許多參與者,以及在X3J16的整個年裏一直在其中受苦的人們。
  Bjarne Stroustrup於新澤西默裏山第1版前言The C++ Programming Language, Fourth Edition語言磨礪瞭我們思維的方式,也決定著我們思考的範圍。
  ——B. L. WhorfC++是一種通用的程序設計語言,其設計就是為瞭使認真的程序員工作得更愉快。除瞭一些小細節之外,C++是C程序設計語言的一個超集。C++提供瞭C所提供的各種功能,還為定義新類型提供瞭靈活而有效的功能。程序員可以通過定義新類型,使這些類型與應用中的概念緊密對應,從而把一個應用劃分成許多容易管理的片段。這種程序構造技術通常被稱為數據抽象。某些用戶定義類型的對象包含著類型信息,這種對象就可以方便而安全地用在那種對象類型無法在編譯時確定的環境中。使用這種類型的對象的程序通常被稱為是基於對象的。如果用得好,這些技術可以産生齣更短、更容易理解,而且也更容易管理的程序。
  C++裏的關鍵概念是類。一個類就是一個用戶定義類型。類提供瞭對數據的隱藏,數據的初始化保證,用戶定義類型的隱式類型轉換,動態類型識彆,用戶控製的存儲管理,以及重載運算符的機製等。在類型檢查和錶述模塊性方麵,C++提供瞭比C好得多的功能。它還包含瞭許多並不直接與類相關的改進,包括符號常量、函數的在綫替換、默認函數參數、重載函數名、自由存儲管理運算符,以及引用類型等。C++保持瞭C高效處理硬件基本對象(位、字節、字、地址等)的能力。這就使用戶定義類型能夠在相當高的效率水平上實現。
  C++及其標準庫也是為瞭可移植性而設計的。當前的實現能夠在大多數支持C的係統上運行。C的庫也能用於C++程序,而且大部分支持C程序設計的工具也同樣能用於C++。
  本書的基本目標就是幫助認真的程序員學習這個語言,並將它用於那些非平凡的項目。書中提供瞭有關C++的完整描述,許多完整的例子,以及更多的程序片段。
  緻謝如果沒有許多朋友和同事持之以恒的使用、建議和建設性的批評,C++絕不會像它現在這樣成熟。特彆地,Tom Cargill、Jim Coplien、Stu Feldman、Sandy Fraser、Steve Johnson、Brian Kernighan、Bart Locanthi、Doug McIlroy、Dennis Ritchie、Larry Rosler、Jerry Schwarz和Jon Shopiro對語言發展提供瞭重要的思想。Dave Presotto寫齣瞭流I/O庫的當前實現。
  此外,還有幾百人對C++及其編譯器的開發做齣瞭貢獻:給我提齣改進的建議,描述所遇到的問題,告訴我編譯中的錯誤等。我隻能提及其中的很少幾位:Gary Bishop,Andrew Hume,Tom Karzes,Victor Milenkovic,Rob Murray,Leonie Rose,Brian Schmult和Gary Walker。
  許多人在本書的撰寫過程中為我提供瞭幫助,特彆值得提齣的是Jon Bentley、Laura Eaves、Brian Kernighan、Ted Kowalski、Steve Mahaney、Jon Shopiro,以及參加1985年7月26 ~ 27日俄亥俄州哥倫布貝爾實驗室C++課程的人們。
  Bjarne Stroustrup於新澤西默裏山

探索 C++ 的基石:《C++程序設計語言》(原書第4版,第1-3部分)深度解析 《C++程序設計語言》(原書第4版,第1-3部分)是一部在 C++ 領域享有盛譽的經典著作,它以其嚴謹的學術風格、詳實的內容和對語言核心概念的深刻闡釋,成為瞭無數 C++ 程序員和計算機科學愛好者的必讀之作。本書不僅僅是一本介紹 C++ 語法的教程,更是一次對 C++ 語言設計哲學、演進曆程以及底層機製的深度探索。它帶領讀者從最基礎的語法結構齣發,逐步深入到 C++ 語言的精髓,為理解和掌握這一強大且復雜的編程語言奠定堅實的基礎。 第一部分:語言基礎與程序結構 本書的第一部分,猶如一座宏偉建築的基石,為讀者打下瞭堅實的 C++ 編程基礎。在這裏,作者以一種係統且循序漸進的方式,介紹瞭 C++ 語言最核心、最基礎的組成部分。 從零開始的編程啓濛: 作者並未假設讀者具備深厚的編程經驗,而是從最基本的“Hello, World!”程序開始,引導讀者理解程序的構成要素:語句、錶達式、變量、常量等。通過剖析每一個簡單的例子,讓讀者直觀地感受到代碼是如何轉化為計算機可執行指令的。 數據的雕刻: 數據是程序的靈魂。本部分詳細介紹瞭 C++ 中的各種基本數據類型,包括整型(`int`、`short`、`long` 等)、浮點型(`float`、`double`)、字符型(`char`)以及布爾型(`bool`)。讀者將學習如何聲明、初始化和操作這些數據類型,理解它們在內存中的錶示方式以及不同類型之間的轉換規則。 邏輯的織網: 程序之所以能夠完成復雜的任務,離不開邏輯判斷和流程控製。作者深入淺齣地講解瞭 C++ 中的條件語句(`if`、`else if`、`else`)、循環語句(`for`、`while`、`do-while`)以及跳轉語句(`break`、`continue`、`goto`)。通過大量的示例,讀者將學會如何利用這些結構來控製程序的執行流程,實現分支和迭代,解決實際問題。 函數的威力: 函數是模塊化編程的核心。本書詳細闡述瞭函數的定義、調用、參數傳遞(傳值、傳引用)以及返迴值。讀者將理解函數如何幫助我們封裝代碼、提高復用性、簡化程序的復雜度,並逐步掌握遞歸的概念。 指針的奧秘: 指針是 C++ 語言中最具特色也最具挑戰性的概念之一。作者以嚴謹的態度,循序漸進地揭示瞭指針的本質——內存地址的載體。讀者將學習如何聲明、解引用指針,理解指針與數組的關係,以及指針在動態內存分配中的作用。對於初學者而言,指針的掌握是通往 C++ 高級特性的關鍵一步。 數組的集閤: 數組作為存儲同類型元素的綫性集閤,在程序設計中扮演著重要角色。本書介紹瞭數組的聲明、初始化和訪問方式,並與指針緊密結閤,展現瞭其強大的數據組織能力。 字符串的處理: 無論是簡單的文本輸齣還是復雜的數據解析,字符串處理都必不可少。本書在介紹字符數組的同時,也引齣瞭 C++ 標準庫中的字符串類(`std::string`),讓讀者能夠更便捷、更安全地進行字符串操作。 第二部分:麵嚮對象設計的哲學與實踐 C++ 之所以強大,很大程度上源於其對麵嚮對象編程(OOP)的卓越支持。本書的第二部分,是深入理解 C++ 麵嚮對象特性的核心篇章。 抽象的藝術:類與對象: 作者首先介紹瞭麵嚮對象設計的核心概念——類(`class`)和對象(`object`)。讀者將學習如何定義類,將數據(成員變量)和行為(成員函數)封裝在一起,並創建類的實例(對象)。這如同為現實世界的事物建立瞭數字模型。 封裝的守護:訪問控製: `public`、`private` 和 `protected` 關鍵字的含義以及它們如何控製類的成員的可訪問性,是實現信息隱藏和數據安全的關鍵。本書對此進行瞭詳盡的闡述。 多態的魅力:繼承與虛函數: 繼承(`inheritance`)允許新類(派生類)繼承現有類(基類)的屬性和行為,從而實現代碼的重用和“is-a”關係。更重要的是,本書將深入講解虛函數(`virtual`)和抽象基類,揭示 C++ 強大的運行時多態性,讓對象能夠根據其真實類型做齣不同的響應,這是實現靈活設計和可擴展性的基石。 構建的藝術:構造函數與析構函數: 構造函數(`constructor`)負責對象的初始化,而析構函數(`destructor`)負責對象的清理。本書詳細介紹瞭構造函數的重載、拷貝構造函數、移動構造函數,以及析構函數的調用時機和作用,確保資源的正確管理。 運算符的重載: 允許我們為自定義類型賦予與內置類型相似的運算符行為,使得代碼更加直觀和易讀。本書會深入講解如何重載各種運算符,提升代碼的錶達力。 模闆的通用性:泛型編程的開端: 模闆(`template`)是 C++ 實現泛型編程的基石,它允許我們編寫獨立於具體數據類型的代碼。本書將介紹函數模闆和類模闆,為讀者打開通往高效、可復用代碼的大門。 第三部分:高級特性與庫的融閤 在掌握瞭 C++ 的基礎和麵嚮對象的核心之後,本書的第三部分將帶領讀者邁入 C++ 的高級領域,探索其強大的標準庫以及更深層次的語言特性。 異常處理:應對意外: 程序運行過程中難免會遇到各種異常情況。本書詳細講解瞭 C++ 的異常處理機製(`try`、`catch`、`throw`),幫助讀者編寫更健壯、更能容錯的代碼。 流的交互:輸入輸齣的藝術: C++ 標準庫中的 iostream 庫提供瞭強大的輸入輸齣功能。讀者將學習如何使用 `cin`、`cout`、`ifstream`、`ofstream` 等進行控製颱和文件的讀寫操作,並理解流的各種操縱符,實現格式化輸齣。 容器的百寶箱:STL 的威力: 標準模闆庫(STL)是 C++ 最為重要的組成部分之一。本書將深入介紹 STL 中的各種容器,如 `vector`(動態數組)、`list`(雙嚮鏈錶)、`deque`(雙端隊列)、`set`(集閤)、`map`(映射)等,以及與之配套的算法和迭代器。掌握 STL 能夠極大地提高開發效率和代碼性能。 算法的邏輯: STL 提供瞭豐富且高效的算法,如排序、查找、遍曆、轉換等。本書將詳細介紹這些算法的使用,並引導讀者理解算法的通用性和效率。 迭代器的漫遊: 迭代器是訪問 STL 容器元素的通用接口。讀者將理解不同類型的迭代器,以及它們在遍曆和操作容器時的作用。 智能指針的守護: 傳統的裸指針容易導緻內存泄漏和懸空指針等問題。本書將介紹 C++11 引入的智能指針(`std::unique_ptr`、`std::shared_ptr`、`std::weak_ptr`),它們能夠自動管理內存,大大提高程序的安全性。 內存模型的深入: 對於 C++ 程序員而言,理解內存模型是至關重要的。本書可能會觸及到內存布局、對齊等更底層的主題,幫助讀者建立對 C++ 內存管理的深刻認識。 並發編程的入門: 隨著多核處理器的普及,並發編程越來越重要。本書的第三部分可能還會介紹 C++ 在並發方麵的一些基本概念和工具,為讀者打開瞭解多綫程編程的大門。 《C++程序設計語言》(原書第4版,第1-3部分)並非一本速成的秘籍,而是一部需要耐心研讀、反復思考的經典。它所涵蓋的知識點廣泛而深入,從最基本的編程範式到最前沿的語言特性,無不體現著 C++ 語言的強大和靈活性。通過學習本書,讀者不僅能夠掌握 C++ 的語法和特性,更重要的是,能夠培養起嚴謹的編程思維,理解 C++ 語言的設計理念,從而能夠編寫齣高效、健壯、可維護的 C++ 程序,在計算機科學的廣闊天地中,踏齣堅實的步伐。

用戶評價

評分

作為一個在C++領域摸爬滾打多年的開發者,我一直尋求一本能夠係統梳理C++核心概念,並且能夠幫助我達到“精通”境界的書籍。這本書無疑滿足瞭我的需求。它深入到C++的每一個角落,從最基礎的類型係統,到復雜的模闆元編程,無所不包。我尤其推崇書中對“麵嚮對象”這個概念的深入探討,作者不僅僅是介紹類和對象的語法,而是從其設計理念、封裝、繼承、多態的實現機製,以及各種設計模式的應用場景,都進行瞭極其詳盡的講解。當我閱讀到關於“移動語義”和“右值引用”的章節時,我感覺自己對C++的理解進入瞭一個新的層麵,這本書用清晰的邏輯和恰當的例子,將這些相對抽象的概念解釋得淋灕盡緻。我曾經遇到過一些性能瓶頸問題,通過迴顧書中關於高效編碼的建議,例如如何選擇閤適的STL容器,如何避免不必要的拷貝,如何利用move語義優化代碼,都得到瞭很好的解決。這本書就像一個寶藏,每一次翻閱,都能從中挖掘齣新的知識和啓發,讓我對C++的掌握程度更上一層樓。

評分

這本書的厚度足以讓人望而生畏,但當你真正投入其中,你會發現每一頁都蘊含著寶貴的知識。我一直認為,學習一門語言,尤其是像C++這樣底層的語言,理解其設計哲學和演進曆史是至關重要的。這本書在這方麵做得非常齣色。作者不僅詳細介紹瞭C++標準的發展曆程,還解釋瞭為什麼某些特性被引入,以及它們在解決實際問題中的作用。例如,在講解泛型編程和模闆元編程時,作者會追溯到C++的起源,解釋模闆是如何應運而生的,以及它如何與STL相結閤,成為現代C++編程的基石。我尤其欣賞書中關於RAII(Resource Acquisition Is Initialization)的論述,它不僅僅是一個設計模式,更是一種思維方式,貫穿瞭C++語言的方方麵麵。書中通過大量的實例,展示瞭如何利用RAII來管理動態內存、文件句柄、鎖等資源,從而避免內存泄漏和資源耗盡的風險。即使是那些我自認為已經熟練掌握的STL容器,在閱讀瞭書中對它們內部實現機製的剖析後,也對它們的性能和適用場景有瞭更深入的理解。這本書不僅僅是一本技術手冊,更是一本能夠提升你編程思維高度的哲學讀物。

評分

這本書簡直是C++世界的百科全書!作為一個從C語言過渡到C++的程序員,我深知理解C++的精髓有多麼重要,而這本書無疑是我的指路明燈。它不僅僅是羅列語法規則,而是深入淺齣地講解瞭C++的底層機製,比如內存管理、對象模型、模闆的魔力以及STL的精妙設計。我尤其欣賞作者在講解每一個概念時,都會輔以大量的代碼示例,並且這些示例都非常精煉,能夠清晰地展示概念的實際應用。閱讀過程中,我經常會停下來,反復揣摩那些代碼,嘗試著去修改它們,觀察結果,這極大地加深瞭我對C++特性的理解。對於書中關於RAII(Resource Acquisition Is Initialization)的闡述,更是讓我茅塞頓開,解決瞭我在資源管理方麵長期存在的睏惑。我曾經也看過一些其他的C++書籍,但很多都停留在錶麵,或者過於晦澀難懂,而這本書恰好找到瞭一個完美的平衡點,既有深度又不失易讀性。即使是對於一些非常復雜的概念,例如運算符重載的細節,或者迭代器的不同類型,作者也能用清晰的邏輯和形象的比喻來解釋,讓我這個初學者也能逐步掌握。這本書陪伴我度過瞭無數個攻剋難關的夜晚,它的價值無法用言語來衡量,強烈推薦給所有希望深入理解C++的開發者!

評分

坦白說,我拿到這本書的時候,心情是既期待又忐忑的。C++的名聲在外,復雜和學習難度是很多初學者望而卻步的原因。但自從我翻開這本書的扉頁,這種不安很快就被一種豁然開朗的感覺取代瞭。作者的寫作風格非常獨特,他並非像流水賬一樣介紹每一個特性,而是將C++的各個方麵巧妙地編織在一起,形成一個嚴謹而又邏輯清晰的知識體係。讓我印象最深刻的是,書中對“如何思考C++”的引導。它不僅僅教會你“是什麼”,更重要的是教會你“為什麼是這樣”以及“在什麼場景下該如何運用”。例如,在講解繼承和多態時,作者並沒有僅僅停留在語法層麵,而是深入探討瞭虛函數的工作原理,以及如何利用多態實現更靈活的代碼設計。對於一些初學者容易混淆的概念,比如常量引用和左值引用,書中都有非常細緻的辨析。我特彆喜歡書中關於異常處理的章節,作者強調瞭異常安全性的重要性,並給齣瞭實用的建議,這對於編寫健壯的C++程序至關重要。讀這本書的過程,就像在和一位經驗豐富且學識淵博的導師對話,他循循善誘,引領你一步步探索C++的深邃之處。即使是那些我已經掌握的知識點,在通過這本書的視角重新審視時,也發現瞭很多新的理解角度。

評分

我拿到這本書的時候,它就成瞭我案頭最重要的參考資料。作為一名對C++有著濃厚興趣的開發者,我一直在尋找一本能夠全麵、深入地講解C++核心概念的書籍。這本書的寫作風格非常嚴謹,作者對C++的理解可謂是“庖丁解牛”,能夠將復雜的概念分解得清晰易懂。我特彆喜歡書中對“值類彆”和“生命周期”的闡述,這對於理解C++的內存管理和對象行為至關重要。書中對於異常處理的講解,也讓我印象深刻,作者強調瞭異常安全性的重要性,並給齣瞭許多實用的建議,這對於編寫健壯、可靠的代碼非常有幫助。即使是我已經使用多年的STL庫,通過這本書的視角,我纔真正理解瞭其內部的工作原理,以及如何更有效地使用它們。例如,書中對迭代器失效問題的詳細解釋,以及對不同排序算法的性能分析,都為我解決實際問題提供瞭寶貴的指導。這本書不僅僅是一本工具書,更是一本能夠提升你編程思想高度的書籍,強烈推薦給所有想要在C++領域有所建樹的開發者。

評分

還是我東迅速呐,效率高,質量好。要的就是這種感覺呢

評分

很經典的一本書,很厚,內容介紹的很詳細。這本書適閤有一些基礎的,有些難,不太適閤入門

評分

大概翻瞭一下,書沒啥毛病,可惜英語不好,不然買原版英文

評分

字跡清晰,包裝完好,很好很好

評分

作為上半部分對標準庫的補充吧,內容一般。

評分

很好很強大,程序之父的書對學習很有幫助

評分

還行,不錯。。。。。。。。。。。

評分

好好好好好好好

評分

書的質量挺好,值的一讀。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.teaonline.club All Rights Reserved. 圖書大百科 版權所有