注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡軟件與程序設計C++20高級編程(第5版)

C++20高級編程(第5版)

C++20高級編程(第5版)

定 價:¥228.00

作 者: [比]馬克·格雷戈勒(Marc Gregoire) 著,程序喵大人 惠惠 墨梵 譯
出版社: 清華大學出版社
叢編項:
標 簽: 暫缺

ISBN: 9787302602132 出版時間: 2022-04-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 1000 字數(shù):  

內(nèi)容簡介

  主要內(nèi)容● 演示如何用C 思考,以更大限度地發(fā)揮語言的深遠能力,并開發(fā)有效的解決方案● 解釋難以理解的原理,進行陷阱警告,分享提高效率和性能的提示、技巧和變通方法● 呈現(xiàn)各種具有挑戰(zhàn)性的、真實世界的程序,其用途廣泛,足以融入任何項目● 重點介紹C 20的新特性,包括模塊、概念、三向比較、立即執(zhí)行函數(shù)等● 深入討論新的C 20標準庫功能,例如文本格式化、范圍、原子智能指針、同步原語、日期、時區(qū)等

作者簡介

  Marc Gregoire是一名軟件工程師,畢業(yè)于比利時魯汶大學,擁有計算機科學工程碩士學位。之后,他在魯汶大學又獲得人工智能專業(yè)的優(yōu)等碩士學位。完成學業(yè)后,他開始為軟件咨詢公司Ordina Belgium工作。他曾在Siemens 和Nokia Siemens Networks為大型電信運營商提供有關在Solaris上運行關鍵2G和3G軟件的咨詢服務。這份工作要求與來自南美、美國、歐洲、中東、非洲和亞洲的國際團隊合作。Marc目前擔任Nikon Metrology(www.nikonmetrology.com)的軟件架構師;Nikon Metrology是Nikon的一個部門,是精密光學儀器、X光機等設備和X光、CT和3D掃描解決方案的領先供應商。Marc的主要技術專長是C/C ,特別是Microsoft VC 和MFC框架。他還擅長在Windows和Linux平臺上開發(fā)24×7運行的C 程序,例如KNX/EIB家庭自動化監(jiān)控軟件。除了C/C 之外,Marc還喜歡C#。 2007年4月,他憑借Visual C 方面的專業(yè)技能,獲得了微軟年度MVP稱號。Marc還是比利時C 用戶組(www.becpp.org)的創(chuàng)始人,是C Standard Library Quick Reference 第1版和第2版(Apress)的共同作者,以及多家出版社出版的多種書籍的技術編輯,是C 大會CppCon的活躍演講者。

圖書目錄

第I部分  專業(yè)的C 簡介
第1章  C 和標準庫速成   3
1.1  C 速成   3
1.1.1  小程序“Hello World”   4
1.1.2  名稱空間   7
1.1.3  字面量   9
1.1.4  變量   9
1.1.5  運算符   12
1.1.6  枚舉類型   14
1.1.7  結構體   16
1.1.8  條件語句   17
1.1.9  條件運算符   19
1.1.10  邏輯比較運算符   20
1.1.11  三向比較運算符   21
1.1.12  函數(shù)   22
1.1.13  屬性   23
1.1.14  C風格的數(shù)組   26
1.1.15  std::array   27
1.1.16  std::vector   28
1.1.17  std::pair   28
1.1.18  std::optional   29
1.1.19  結構化綁定   30
1.1.20  循環(huán)   30
1.1.21  初始化列表   31
1.1.22  C 中的字符串   32
1.1.23  作為面向?qū)ο笳Z言的C   32
1.1.24  作用域解析   35
1.1.25  統(tǒng)一初始化   36
1.1.26  指針和動態(tài)內(nèi)存   39
1.1.27  const的用法   43
1.1.28  constexpr關鍵字   45
1.1.29  consteval關鍵字   46
1.1.30  引用   47
1.1.31  const_cast()   55
1.1.32  異常   56
1.1.33  類型別名   56
1.1.34  類型定義   57
1.1.35  類型推斷   58
1.1.36  標準庫   60
1.2  個大型的C 程序   61
1.2.1  雇員記錄系統(tǒng)   61
1.2.2  Employee類   61
1.2.3  Database類   64
1.2.4  用戶界面   67
1.2.5  評估程序   69
1.3  本章小結   69
1.4  練習   69
第2章  使用string和string_view   71
2.1  動態(tài)字符串   71
2.1.1  C風格字符串   71
2.1.2  字符串字面量   73
2.1.3  C std::string類   75
2.1.4  數(shù)值轉(zhuǎn)換   78
2.1.5  std::string_view類   81
2.1.6  非標準字符串   84
2.2  字符串格式化   84
2.2.1  格式說明符   85
2.2.2  格式說明符錯誤   87
2.2.3  支持自定義類型   87
2.3  本章小結   90
2.4  練習   90
第3章  編碼風格   91
3.1  良好外觀的重要性   91
3.1.1  事先考慮   91
3.1.2  良好風格的元素   92
3.2  為代碼編寫文檔   92
3.2.1  使用注釋的原因   92
3.2.2  注釋的風格   96
3.3  分解   99
3.3.1  通過重構分解   100
3.3.2  通過設計分解   101
3.3.3  本書中的分解   101
3.4  命名   101
3.4.1  選擇恰當?shù)拿Q   101
3.4.2  命名約定   102
3.5  使用具有風格的語言特性   103
3.5.1  使用常量   104
3.5.2  使用引用代替指針   104
3.5.3  使用自定義異常   104
3.6  格式   105
3.6.1  關于大括號對齊的爭論   105
3.6.2  關于空格和圓括號的爭論   106
3.6.3  空格、制表符、換行符   106
3.7  風格的挑戰(zhàn)   107
3.8  本章小結   107
3.9  練習   107
第II部分  專業(yè)的C 軟件設計
第4章  設計專業(yè)的C 程序   113
4.1  程序設計概述   113
4.2  程序設計的重要性   114
4.3  C 設計   116
4.4  C 設計的兩個原則   116
4.4.1  抽象   116
4.4.2  重用   118
4.5  重用現(xiàn)有代碼   119
4.5.1  關于術語的說明   119
4.5.2  決定是否重用代碼   120
4.5.3  重用代碼的指導原則   121
4.6  設計一個國際象棋程序   127
4.6.1  需求   127
4.6.2  設計步驟   127
4.7  本章小結   132
4.8  練習   133
第5章  面向?qū)ο笤O計   135
5.1  過程化的思考方式   135
5.2  面向?qū)ο笏枷?  136
5.2.1  類   136
5.2.2  組件   136
5.2.3  屬性   136
5.2.4  行為   137
5.2.5  綜合考慮   137
5.3  生活在類的世界里   138
5.3.1  過度使用類   138
5.3.2  過于通用的類   139
5.4  類之間的關系   139
5.4.1  “有一個”關系   139
5.4.2  “是一個”關系(繼承)   140
5.4.3  “有一個”與“是一個”的
區(qū)別   142
5.4.4  not-a關系   144
5.4.5  層次結構   145
5.4.6  多重繼承   146
5.4.7  混入類   147
5.5  本章小結   147
5.6  練習   148
第6章  設計可重用代碼   149
6.1  重用哲學   149
6.2  如何設計可重用代碼   150
6.2.1  使用抽象   150
6.2.2  構建理想的重用代碼   151
6.2.3  設計有用的接口   157
6.2.4  設計成功的抽象   162
6.2.5  SOLID原則   162
6.3  本章小結   163
6.4  練習   163
第III部分  C 編碼方法
第7章  內(nèi)存管理   167
7.1  使用動態(tài)內(nèi)存   167
7.1.1  如何描繪內(nèi)存   168
7.1.2  分配和釋放   169
7.1.3  數(shù)組   170
7.1.4  使用指針   177
7.2  數(shù)組-指針的對偶性   178
7.2.1  數(shù)組就是指針   178
7.2.2  并非所有指針都是數(shù)組   180
7.3  底層內(nèi)存操作   180
7.3.1  指針運算   180
7.3.2  自定義內(nèi)存管理   181
7.3.3  垃圾回收   181
7.3.4  對象池   182
7.4  常見的內(nèi)存陷阱   182
7.4.1  數(shù)據(jù)緩沖區(qū)分配不足以及
內(nèi)存訪問越界   182
7.4.2  內(nèi)存泄漏   183
7.4.3  雙重釋放和無效指針   186
7.5  智能指針   186
7.5.1  unique_ptr   187
7.5.2  shared_ptr   190
7.5.3  weak_ptr   193
7.5.4  向函數(shù)傳遞參數(shù)   193
7.5.5  從函數(shù)中返回   194
7.5.6  enable_shared_from_this   194
7.5.7  過時的、移除的auto_ptr   195
7.6  本章小結   195
7.7  練習   195
第8章  類和對象   197
8.1  電子表格示例介紹   197
8.2  編寫類   198
8.2.1  類定義   198
8.2.2  定義方法   200
8.2.3  使用對象   203
8.3  對象的生命周期   205
8.3.1  創(chuàng)建對象   205
8.3.2  銷毀對象   219
8.3.3  對象賦值   220
8.3.4  編譯器生成的拷貝構造函數(shù)和
拷貝賦值運算符   223
8.3.5  復制和賦值的區(qū)別   223
8.4  本章小結   224
8.5  練習   225
第9章  精通類和對象   227
9.1  友元   227
9.2  對象中的動態(tài)內(nèi)存分配   228
9.2.1  Spreadsheet類   228
9.2.2  使用析構函數(shù)釋放內(nèi)存   231
9.2.3  處理復制和賦值   231
9.2.4  使用移動語義處理移動   237
9.2.5  零規(guī)則   246
9.3  與方法有關的更多內(nèi)容   246
9.3.1  static方法   246
9.3.2  const方法   247
9.3.3  方法重載   248
9.3.4  內(nèi)聯(lián)方法   251
9.3.5  默認參數(shù)   252
9.4  不同的數(shù)據(jù)成員類型   252
9.4.1  靜態(tài)數(shù)據(jù)成員   253
9.4.2  const static數(shù)據(jù)成員   254
9.4.3  引用數(shù)據(jù)成員   255
9.5  嵌套類   256
9.6  類內(nèi)的枚舉類型   257
9.7  運算符重載   258
9.7.1  示例:為SpreadsheetCell
實現(xiàn)加法   258
9.7.2  重載算術運算符   261
9.7.3  重載比較運算符   262
9.7.4  創(chuàng)建具有運算符重載的類型   266
9.8  創(chuàng)建穩(wěn)定的接口   266
9.9  本章小結   270
9.10  練習   270
第10章  揭秘繼承技術   271
10.1  使用繼承構建類   271
10.1.1  擴展類   272
10.1.2  重寫方法   275
10.2  使用繼承重用代碼   282
10.2.1  WeatherPrediction類   282
10.2.2  在派生類中添加功能   283
10.2.3  在派生類中替換功能   284
10.3  利用父類   285
10.3.1  父類構造函數(shù)   285
10.3.2  父類的析構函數(shù)   286
10.3.3  使用父類方法   287
10.3.4  向上轉(zhuǎn)型和向下轉(zhuǎn)型   289
10.4  繼承與多態(tài)性   290
10.4.1  回到電子表格   290
10.4.2  設計多態(tài)性的電子表格
單元格   291
10.4.3  SpreadsheetCell基類   291
10.4.4  獨立的派生類   293
10.4.5  利用多態(tài)性   294
10.4.6  考慮將來   295
10.5  多重繼承   296
10.5.1  從多個類繼承   296
10.5.2  名稱沖突和歧義基類   297
10.6  有趣而晦澀的繼承問題   300
10.6.1  修改重寫方法的返回類型   300
10.6.2  派生類中添加虛基類方法的
重載   301
10.6.3  繼承的構造函數(shù)   302
10.6.4  重寫方法時的特殊情況   306
10.6.5  派生類中的復制構造函數(shù)和
賦值運算符   312
10.6.6  運行期類型工具   313
10.6.7  非public繼承   314
10.6.8  虛基類   315
10.7  類型轉(zhuǎn)換   316
10.7.1  static_cast()   316
10.7.2  reinterpret_cast()   317
10.7.3  std::bit_cast()   318
10.7.4  dynamic_cast()   318
10.7.5  類型轉(zhuǎn)換小結   319
10.8  本章小結   319
10.9  練習   320
第11章  零碎的工作   321
11.1  模塊   321
11.1.1  模塊接口文件   322
11.1.2  模塊實現(xiàn)文件   324
11.1.3  從實現(xiàn)中分離接口   325
11.1.4  可見性和可訪問性   326
11.1.5  子模塊   326
11.1.6  模塊劃分   327
11.1.7  頭文件單元   329
11.2  頭文件   330
11.2.1  重復定義   330
11.2.2  循環(huán)依賴   330
11.2.3  查詢頭文件是否存在   331
11.3  核心語言特性的特性測試宏   331
11.4  STATIC關鍵字   332
11.4.1  靜態(tài)數(shù)據(jù)成員和方法   332
11.4.2  靜態(tài)鏈接   332
11.4.3  函數(shù)中的靜態(tài)變量   334
11.4.4  非局部變量的初始化順序   335
11.4.5  非局部變量的銷毀順序   335
11.5  C的實用工具   335
11.5.1  變長參數(shù)列表   336
11.5.2  預處理器宏   337
11.6  本章小結   338
11.7  練習   338
第12章  利用模板編寫泛型代碼   341
12.1  模板概述   341
12.2  類模板   342
12.2.1  編寫類模板   342
12.2.2  編譯器處理模板的原理   349
12.2.3  將模板代碼分布到多個
文件中   350
12.2.4  模板參數(shù)   351
12.2.5  方法模板   355
12.2.6  類模板的特化   359
12.2.7  從類模板派生   361
12.2.8  繼承還是特化   362
12.2.9  模板別名   362
12.3  函數(shù)模板   363
12.3.1  函數(shù)模板的重載   364
12.3.2  類模板的友元函數(shù)模板   365
12.3.3  對模板參數(shù)推導的更多介紹   366
12.3.4  函數(shù)模板的返回類型   367
12.4  簡化函數(shù)模板的語法   368
12.5  變量模板   369
12.6  概念   369
12.6.1  語法   369
12.6.2  約束表達式   370
12.6.3  預定義的標準概念   372
12.6.4  類型約束的auto   372
12.6.5  類型約束和函數(shù)模板   373
12.6.6  類型約束和類模板   375
12.6.7  類型約束和類方法   375
12.6.8  類型約束和模板特化   376
12.7  本章小結   376
12.8  練習   377
第13章  C I/O揭秘   379
13.1  使用流   379
13.1.1  流的含義   380
13.1.2  流的來源和目的地   381
13.1.3  流式輸出   381
13.1.4  流式輸入   386
13.1.5  對象的輸入輸出   392
13.1.6  自定義的操作算子   393
13.2  字符串流   393
13.3  文件流   394
13.3.1  文本模式與二進制模式   395
13.3.2  通過seek()和tell()在文件中
轉(zhuǎn)移   395
13.3.3  將流鏈接在一起   397
13.4  雙向I/O   398
13.5  文件系統(tǒng)支持庫   399
13.5.1  路徑   399
13.5.2  目錄條目   401
13.5.3  輔助函數(shù)   401
13.5.4  目錄遍歷   401
13.6  本章小結   402
13.7  練習   403
第14章  錯誤處理   405
14.1  錯誤與異常   405
14.1.1  異常的含義   405
14.1.2  C 中異常的優(yōu)點   406
14.1.3  建議   407
14.2  異常機制   407
14.2.1  拋出和捕獲異常   408
14.2.2  異常類型   410
14.2.3  按const引用捕獲異常對象   411
14.2.4  拋出并捕獲多個異常   411
14.2.5  未捕獲的異常   414
14.2.6  noexcept說明符   415
14.2.7  noexcept(expression)說明符   415
14.2.8  noexcept(expression)運算符   415
14.2.9  拋出列表   416
14.3  異常與多態(tài)性   416
14.3.1  標準異常層次結構   416
14.3.2  在類層次結構中捕獲異常   418
14.3.3  編寫自己的異常類   419
14.3.4  源碼位置   421
14.3.5  日志記錄的源碼位置   422
14.3.6  異常的源碼位置   422
14.3.7  嵌套異常   423
14.4 重新拋出異常   425
14.5  堆棧的釋放與清理   426
14.5.1  使用智能指針   427
14.5.2  捕獲、清理并重新拋出   428
14.6  常見的錯誤處理問題   428
14.6.1  內(nèi)存分配錯誤   428
14.6.2  構造函數(shù)中的錯誤   430
14.6.3  構造函數(shù)的function-try-blocks   432
14.6.4  析構函數(shù)中的錯誤   435
14.7  本章小結   435
14.8  練習   435
第15章  C 運算符重載   437
15.1  運算符重載概述   437
15.1.1  重載運算符的原因   438
15.1.2  運算符重載的限制   438
15.1.3  運算符重載的選擇   438
15.1.4  不應重載的運算符   440
15.1.5  可重載運算符小結   440
15.1.6  右值引用   443
15.1.7  優(yōu)先級和結合性   444
15.1.8  關系運算符   444
15.2  重載算術運算符   445
15.2.1  重載一元負號和一元正號
運算符   445
15.2.2  重載遞增和遞減運算符   446
15.3  重載按位運算符和二元邏輯
運算符   446
15.4  重載插入運算符和提取運算符   447
15.5  重載下標運算符   448
15.5.1  通過operator[]提供只讀訪問   451
15.5.2  非整數(shù)數(shù)組索引   452
15.6  重載函數(shù)調(diào)用運算符   452
15.7  重載解除引用運算符   453
15.7.1  實現(xiàn)operator*   454
15.7.2  實現(xiàn)operator->   455
15.7.3  operator.*和operator ->*的
含義   455
15.8  編寫轉(zhuǎn)換運算符   456
15.8.1  auto運算符   456
15.8.2  使用顯式轉(zhuǎn)換運算符解決
多義性問題   457
15.8.3  用于布爾表達式的轉(zhuǎn)換   457
15.9  重載內(nèi)存分配和內(nèi)存釋放
運算符   459
15.9.1  new和delete的工作原理   459
15.9.2  重載operator new和
operator delete   461
15.9.3  顯式地刪除/默認化operator new
和operator delete   463
15.9.4  重載帶有額外參數(shù)的operator new
和operator delete   463
15.9.5  重載帶有內(nèi)存大小參數(shù)的
operator delete   464
15.9.6  重載用戶定義的字面量
運算符   464
15.9.7  cooked模式字面量運算符   465
15.9.8  raw模式字面量運算符   465
15.9.9  標準用戶定義的字面量   466
15.10  本章小結   466
15.11  練習   466
第16章  C 標準庫概述   469
16.1  編碼原則   470
16.1.1  使用模板   470
16.1.2  使用運算符重載   470
16.2  C 標準庫概述   470
16.2.1  字符串   470
16.2.2  正則表達式   471
16.2.3  I/O流   471
16.2.4  智能指針   471
16.2.5  異常   471
16.2.6  數(shù)學工具   472
16.2.7  時間和日期工具   473
16.2.8  隨機數(shù)   473
16.2.9  初始化列表   474
16.2.10  Pair和Tuple   474
16.2.11  詞匯類型   474
16.2.12  函數(shù)對象   474
16.2.13  文件系統(tǒng)   474
16.2.14  多線程   475
16.2.15  類型萃取   475
16.2.16  標準整數(shù)類型   475
16.2.17  標準庫特性測試宏   475
16.2.18     476
16.2.19  源位置   476
16.2.20  容器   476
16.2.21  算法   482
16.2.22  范圍庫   488
16.2.23  標準庫中還缺什么   488
16.3  本章小結   489
16.4  練習   489
第17章  理解迭代器與范圍庫   491
17.1  迭代器   491
17.1.1  獲取容器的迭代器   494
17.1.2  迭代器萃取   495
17.1.3  示例   495
17.2  流迭代器   496
17.2.1  輸出流迭代器   497
17.2.2  輸入流迭代器   497
17.3  迭代器適配器   498
17.3.1  插入迭代器   498
17.3.2  逆向迭代器   499
17.3.3  移動迭代器   500
17.4  范圍   502
17.4.1  基于范圍的算法   502
17.4.2  視圖   504
17.4.3  范圍工廠   508
17.5  本章小結   509
17.6  練習   509
第18章  標準庫容器   511
18.1  容器概述   511
18.1.1  對元素的要求   512
18.1.2  異常和錯誤檢查   513
18.2  順序容器   514
18.2.1  vector   514
18.2.2  vector特化   531
18.2.3  deque   532
18.2.4  list   532
18.2.5  forward_list   535
18.2.6  array   537
18.2.7  span   538
18.3  容器適配器   540
18.3.1  queue   540
18.3.2  priority_queue   542
18.3.3  stack   545
18.4  有序關聯(lián)容器   545
18.4.1  pair工具類   545
18.4.2  map   546
18.4.3  multimap   554
18.4.4  set   556
18.4.5  multiset   558
18.5  無序關聯(lián)容器/哈希表   558
18.5.1  哈希函數(shù)   559
18.5.2  unordered_map   560
18.5.3  unordered_multimap   563
18.5.4  unordered_set/
unordered_multiset   564
18.6  其他容器   564
18.6.1  標準C風格數(shù)組   564
18.6.2  string   565
18.6.3  流   566
18.6.4  bitset   566
18.7  本章小結   570
18.8  練習   570
第19章  函數(shù)指針,函數(shù)對象,lambda
表達式   571
19.1  函數(shù)指針   571
19.2  指向方法(和數(shù)據(jù)成員)的指針   573
19.3  函數(shù)對象   576
19.3.1  編寫個函數(shù)對象   576
19.3.2  標準庫中的函數(shù)對象   576
19.4  lambda表達式   582
19.4.1  語法   583
19.4.2  lambda表達式作為參數(shù)   587
19.4.3  泛型lambda表達式   587
19.4.4  lambda捕獲表達式   587
19.4.5  模板化lambda表達式   588
19.4.6  lambda表達式作為返回類型   589
19.4.7  未計算上下文中的lambda
表達式   589
19.4.8  默認構造、拷貝和賦值   589 19.5  調(diào)用   590
19.6  本章小結   590
19.7  練習   590
第20章  掌握標準庫算法   593
20.1  算法概述   593
20.1.1  find()和find_if()算法   594
20.1.2  accumulate()算法   596
20.1.3  在算法中使用移動語義   597
20.1.4  算法回調(diào)   597
20.2  算法詳解   598
20.2.1  非修改序列算法   598
20.2.2  修改序列算法   603
20.2.3  操作算法   611
20.2.4  分區(qū)算法   613
20.2.5  排序算法   614
20.2.6  二分查找算法   615
20.2.7  集合算法   616
20.2.8  小/算法   618
20.2.9  并行算法   619
20.2.10  約束算法   620
20.2.11  數(shù)值處理算法   621
20.3  本章小結   622
20.4  練習   622
第21章  字符串的本地化與正則表達式   625
21.1  本地化   625
21.1.1  寬字符   625
21.1.2  本地化字符串字面量   626
21.1.3  非西方字符集   626
21.1.4  locale和facet   628
21.1.5  轉(zhuǎn)換   631
21.2  正則表達式   632
21.2.1  ECMAScript語法   632
21.2.2  regex庫   637
21.2.3  regex_match()   638
21.2.4  regex_search()   640
21.2.5  regex_iterator   641
21.2.6  regex_token_iterator   642
21.2.7  regex_replace()   644
21.3  本章小結   646
21.4  練習   646
第22章  日期和時間工具   647
22.1  編譯期有理數(shù)   647
22.2  持續(xù)時間   649
22.3  時鐘   653
22.4  時間點   655
22.5  日期   656
22.6  時區(qū)   658
22.7  本章小結   659
22.8  練習   659
第23章  隨機數(shù)工具   661
23.1  C風格隨機數(shù)生成器   661
23.1.1  隨機數(shù)引擎   662
23.1.2  隨機數(shù)引擎適配器   663
23.1.3  預定義的隨機數(shù)引擎和
引擎適配器   664
23.1.4  生成隨機數(shù)   664
23.1.5  隨機數(shù)分布   666
23.2  本章小結   668
23.3  練習   669
第24章  其他庫工具   671
24.1  variant   671
24.2  any   673
24.3  元組   674
24.3.1  分解元組   676
24.3.2  串聯(lián)   677
24.3.3  比較   677
24.3.4  make_from_tuple()   678
24.3.5  apply()   678
24.4  本章小結   678
24.5  練習   678
第IV部分  掌握C 的高級特性
第25章  自定義和擴展標準庫   683
25.1  分配器   683
25.2  擴展標準庫   684
25.2.1  擴展標準庫的原因   685
25.2.2  編寫標準庫算法   685
25.2.3  編寫標準庫容器   686
25.2.4  將directed_graph實現(xiàn)為
標準庫容器   696
25.2.5  添加分配器支持   712
25.2.6  改善graph_node   716
25.2.7  附加的標準庫類似功能   717
25.2.8  進一步改善   719
25.2.9  其他容器類型   719
25.3  本章小結   720
25.4  練習   720
第26章  高級模板   721
26.1  深入了解模板參數(shù)   721
26.1.1  深入了解模板類型參數(shù)   721
26.1.2  template template參數(shù)介紹   724
26.1.3  深入了解非類型模板參數(shù)   725
26.2  類模板部分特例化   727
26.3  通過重載模擬函數(shù)部分特例化   730
26.4  模板遞歸   731
26.4.1  N維網(wǎng)格:初次嘗試   731
26.4.2  真正的N維網(wǎng)格   732
26.5  可變參數(shù)模板   734
26.5.1  類型安全的變長參數(shù)列表   734
26.5.2  可變數(shù)目的混入類   736
26.5.3  折疊表達式   737
26.6  模板元編程   739
26.6.1  編譯時階乘   739
26.6.2  循環(huán)展開   740
26.6.3  打印元組   741
26.6.4  類型trait   744
26.6.5  模板元編程結論   752
26.7  本章小結   752
26.8  練習   752
第27章  C 多線程編程   753
27.1  多線程編程概述   754
27.1.1  爭用條件   755
27.1.2  撕裂   756
27.1.3  死鎖   756
27.1.4  偽共享   757
27.2  線程   757
27.2.1  通過函數(shù)指針創(chuàng)建線程   758
27.2.2  通過函數(shù)對象創(chuàng)建線程   759
27.2.3  通過lambda創(chuàng)建線程   760
27.2.4  通過成員函數(shù)創(chuàng)建線程   760
27.2.5  線程本地存儲   761
27.2.6  取消線程   761
27.2.7  自動join線程   761
27.2.8  從線程獲得結果   762
27.2.9  復制和重新拋出異常   762
27.3  原子操作庫   764
27.3.1  原子操作   766
27.3.2  原子智能指針   767
27.3.3  原子引用   767
27.3.4  使用原子類型   767
27.3.5  等待原子變量   769
27.4  互斥   770
27.4.1  互斥體類   770
27.4.2  鎖   772
27.4.3  std::call_once   774
27.4.4  互斥體對象的用法示例   776
27.5  條件變量   779
27.5.1  虛假喚醒   780
27.5.2  使用條件變量   780
27.6  latch   781
27.7  barrier   782
27.8  semaphore   782
27.9  future   783
27.9.1  std::promise和std::future   784
27.9.2  std::packaged_task   784
27.9.3  std::async   785
27.9.4  異常處理   786
27.9.5  std::shared_future   786
27.10  示例:多線程的Logger類   787
27.11  線程池   791
27.12  協(xié)程   792
27.13  線程設計和實踐   793
27.14  本章小結   794
27.15  練習   794
第V部分  C 軟件工程
第28章  充分利用軟件工程方法   799
28.1  過程的必要性   799
28.2  軟件生命周期模型   800
28.2.1  瀑布模型   800
28.2.2  生魚片模型   802
28.2.3  螺旋類模型   802
28.2.4  敏捷   804
28.3  軟件工程方法論   805
28.3.1  UP   805
28.3.2  RUP   806
28.3.3  Scrum   806
28.3.4  極限編程   808
28.3.5  軟件分流   812
28.4  構建自己的過程和方法   812
28.4.1  對新思想采取開放態(tài)度   812
28.4.2  提出新想法   812
28.4.3  知道什么行得通、什么行不通   812
28.4.4  不要逃避   813
28.5  源代碼控制   813
28.6  本章小結   814
28.7  練習   814
第29章  編寫高效的C 程序   817
29.1  性能和效率概述   817
29.1.1  提升效率的兩種方式   818
29.1.2  兩種程序   818
29.1.3  C 是不是低效的語言   818
29.2  語言層次的效率   818
29.2.1  高效地操縱對象   819
29.2.2  預分配內(nèi)存   823
29.2.3  使用內(nèi)聯(lián)方法和函數(shù)   823
29.3  設計層次的效率   823
29.3.1  盡可能多地緩存   823
29.3.2  使用對象池   824
29.4  剖析   829
29.4.1  使用gprof的剖析示例   829
29.4.2  使用Visual C 2019的剖析示例   836
29.5  本章小結   838
29.6  練習   838
第30章  熟練掌握測試技術   841
30.1  質(zhì)量控制   841
30.1.1  誰負責測試   842
30.1.2  bug的生命周期   842
30.1.3  bug跟蹤工具   843
30.2  單元測試   844
30.2.1  單元測試方法   844
30.2.2  單元測試過程   845
30.2.3  實際中的單元測試   848
30.3  模糊測試   855
30.4  高級測試   855
30.4.1  集成測試   855
30.4.2  系統(tǒng)測試   856
30.4.3  回歸測試   857
30.5  用于成功測試的建議   857
30.6  本章小結   858
30.7  練習   858
第31章  熟練掌握調(diào)試技術   859
31.1  調(diào)試的基本定律   859
31.2  bug分類學   860
31.3  避免bug   860
31.4  為bug做好規(guī)劃   861
31.4.1  錯誤日志   861
31.4.2  調(diào)試跟蹤   862
31.4.3  斷言   869
31.4.4  崩潰轉(zhuǎn)儲   870
31.5  調(diào)試技術   870
31.5.1  重現(xiàn)bug   870
31.5.2  調(diào)試可重復的bug   871
31.5.3  調(diào)試不可重現(xiàn)的bug   871
31.5.4  調(diào)試退化   872
31.5.5  調(diào)試內(nèi)存問題   872
31.5.6  調(diào)試多線程程序   876
31.5.7  調(diào)試示例:文章引用   876
31.5.8  從ArticleCitations示例中總結出的教訓   887
31.6  本章小結   887
31.7  練習   887
第32章  使用設計技術和框架   889
32.1  容易忘記的語法   890
32.1.1  編寫類   890
32.1.2  派生類   891
32.1.3  編寫lambda表達式   892
32.1.4  使用“復制和交換”慣用語法   892
32.1.5  拋出和捕捉異常   893
32.1.6  寫入文件   894
32.1.7  讀取文件   894
32.1.8  寫入類模板   895
32.1.9  約束模板參數(shù)   895
32.2  始終存在更好的方法   896
32.2.1  RAII   896
32.2.2  雙分派   898
32.2.3  混入類   902
32.3  面向?qū)ο蟮目蚣?  904
32.3.1  使用框架   904
32.3.2  MVC范型   905
32.4  本章小結   906
32.5  練習   906
第33章  應用設計模式   907
33.1  依賴注入   908
33.1.1  示例:日志機制   908
33.1.2  依賴注入logger的實現(xiàn)   908
33.1.3  使用依賴注入   909
33.2  抽象工廠模式   910
33.2.1  示例:模擬汽車工廠   910
33.2.2  實現(xiàn)抽象工廠   911
33.2.3  使用抽象工廠   912
33.3  工廠方法模式   913
33.3.1  示例:模擬第二個汽車工廠   913
33.3.2  實現(xiàn)工廠   914
33.3.3  使用工廠   915
33.3.4  工廠的其他類型   917
33.3.5  工廠的其他用法   917
33.4  適配器模式   918
33.4.1  示例:適配Logger類   918
33.4.2  實現(xiàn)適配器   919
33.4.3  使用適配器   920
33.5  代理模式   920
33.5.1  示例:隱藏網(wǎng)絡連接問題   920
33.5.2  實現(xiàn)代理   921
33.5.3  使用代理   922
33.6  迭代器模式   922
33.7  觀察者模式   923
33.7.1  示例:從主題中暴露事件   923
33.7.2  實現(xiàn)觀察者   923
33.7.3  使用觀察者   924
33.8  裝飾器模式   925
33.8.1  示例:在網(wǎng)頁中定義樣式   926
33.8.2  裝飾器的實現(xiàn)   926
33.8.3  使用裝飾器   927
33.9  責任鏈模式   928
33.9.1  示例:事件處理   928
33.9.2  實現(xiàn)責任鏈   928
33.9.3  使用責任鏈   929
33.10  單例模式   930
33.10.1  日志記錄機制   931
33.10.2  實現(xiàn)單例   931
33.10.3  使用單例   933
33.11  本章小結   933
33.12  練習   933
第34章  開發(fā)跨平臺和跨語言的應用程序   935
34.1  跨平臺開發(fā)   935
34.1.1  架構問題   935
34.1.2  實現(xiàn)問題   938
34.1.3  平臺專用功能   940
34.2  跨語言開發(fā)   940
34.2.1  混用C和C   941
34.2.2  改變范型   941
34.2.3  鏈接C代碼   944
34.2.4  從C#調(diào)用C 代碼   946
34.2.5  C /CLI在C 中使用C#代碼和在C#中使用C 代碼   947
34.2.6  在Java中使用JNI調(diào)用C 代碼   948
34.2.7  從C 代碼調(diào)用腳本   950
34.2.8  從腳本調(diào)用C 代碼   950
34.2.9  從C 調(diào)用匯編代碼   952
34.3  本章小結   953
34.4  練習   953
第VI部分  附錄
附錄A  C 面試   957
在線資源(掃描封底二維碼下載)
附錄B  標準庫頭文件   977
附錄C  UML簡介   983
附錄D  帶注解的參考文獻   989
 
 

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號