C++實戰:核心技術與最佳實踐

吳詠煒

  • 出版商: 人民郵電
  • 出版日期: 2024-12-01
  • 定價: $599
  • 售價: 8.5$509
  • 語言: 簡體中文
  • 頁數: 344
  • ISBN: 7115657696
  • ISBN-13: 9787115657695
  • 相關分類: C++ 程式語言
  • 下單後立即進貨 (約4週~6週)

  • C++實戰:核心技術與最佳實踐-preview-1
  • C++實戰:核心技術與最佳實踐-preview-2
C++實戰:核心技術與最佳實踐-preview-1

買這商品的人也買了...

相關主題

商品描述

這是一本面向實戰的現代C++指南,由作者結合30餘年C++編程經驗傾力打造。書中聚焦開發者日常高頻使用的語言特性,重點講解慣用法(而非羅列語言里的瑣碎細節),展示代碼示例及其技術原理,旨在幫助大家又快又好地使用C++。

作者精選了對象生存期與RAII、移動語義、標準模板庫(STL)、視圖、智能指針、錯誤處理、並發與異步編程等核心主題,深入淺出地剖析語言特性,並針對實際開發中的常見問題提供解決方案。

本書面向C/C++程序員(特別是遇到困難、希望深入理解並優化C++開發的讀者),以及其他需要提升C++編程能力的開發者。

作者簡介

吴咏炜

国内 C++ 专家、Boolan 首席技术咨询师,曾任英特尔亚太研发中心资深系统架构师,毕业于复旦大学物理系,拥有 30 年 C/C++ 系统级软件开发和架构经验。

目前从事 C++ 相关的技术咨询和培训工作,为华为、大疆等多家公司提供过服务。工作涉及 C/C++ 语言、软件架构、安全软件开发、性能优化、代码重用、开源软件等多方面。

开源软件作品包括:mozi、nvwa、libunibreak 等。

专栏或者翻译作品包括:极客时间专栏《现代 C++ 编程实战》(累计学习人数超过 3.5 万人),图书翻译作品《编程大师访谈录》《C++ Core Guidelines 解析》,论文翻译作品《在纷繁多变的世界里茁壮成长:C++ 2006—2020》,等等。

目錄大綱

推薦序 vii

前言 ix

致謝 xiv

緒論 xv

第 1 章 C 和 C++ 基礎 1

1.1 C 基礎知識 1

1.1.1 代碼組織 1

1.1.2 預處理 2

1.1.3 函數 3

1.1.4 語句和表達式 4

1.1.5 對象和變量 5

1.1.6 基礎類型 6

1.1.7 指針 7

1.1.8 枚舉 7

1.1.9 數組 8

1.1.10 結構體 9

1.1.11 聯合體 9

1.2 C++ 基礎知識 10

1.2.1 C++ 是 C 的超集嗎? 10

1.2.2 引用 12

1.2.3 重載 14

1.2.4 名空間 16

1.2.5 類 17

1.2.6 面向對象編程 23

1.2.7 運行期類型識別 25

1.2.8 異常 25

1.2.9 模板 27

1.2.10 具名轉型 28

1.3 小結 29

第 2 章 對象生存期和 RAII 30

2.1 C++ 對象的存儲期和生存期 30

2.1.1 靜態對象的生存期 30

2.1.2 動態對象的生存期 32

2.1.3 自動對象的生存期 36

2.2 RAII 慣用法 42

2.3 小結 45

第 3 章 值類別和移動語義 46

3.1 引用語義和值語義 46

3.2 值類別 48

3.2.1 左值 48

3.2.2 右值 49

3.3 移動語義 51

3.3.1 提供移動操作的重載 51

3.3.2 移動對代碼風格的影響 53

3.3.3 返回值優化 55

3.4 值類別的其他細節 59

3.4.1 右值引用變量的值類別 59

3.4.2 轉發引用和完美轉發* 60

3.5 三法則、五法則和零法則 62

3.6 小結 65

第 4 章 模板和自動類型推導 66

4.1 模板概要 66

4.2 函數模板 67

4.2.1 模板的定義 67

4.2.2 模板的實例化 68

4.2.3 模板參數推導和 auto 自動類型推導 69

4.3 類模板 73

4.3.1 模板的定義 73

4.3.2 模板的顯式特化 73

4.3.3 類模板的成員函數和類的成員函數模板 75

4.4 變量模板 76

4.5 別名模板 76

4.6 其他類型推導 77

4.6.1 類模板參數推導 77

4.6.2 decltype 77

4.6.3 後置返回類型聲明和返回類型自動推導 78

4.6.4 聲明變量和初始化的不同方式* 79

4.6.5 結構化綁定 82

4.7 小結 83

第 5 章 字符串 84

5.1 字符串概述 84

5.2 string 的基本特點 85

5.2.1 類容器特性 85

5.2.2 字符串特性 87

5.3 basic_string 模板 92

5.4 小結 93

第 6 章 函數對象 94

6.1 什麽是函數對象 94

6.1.1 函數對象類 94

6.1.2 高階函數 95

6.1.3 函數的指針和引用 95

6.2 lambda 表達式 96

6.2.1 基本用法和原理 96

6.2.2 捕獲 97

6.2.3 泛型 lambda 表達式 100

6.3 使用 function 對象 100

6.4 小結 102

第 7 章 標準容器 103

7.1 標準模板庫和容器 103

7.2 序列容器 104

7.2.1 vector 104

7.2.2 deque 111

7.2.3 list 112

7.2.4 forward_list 114

7.2.5 array 115

7.3 關聯容器 117

7.3.1 排序問題 117

7.3.2 關聯容器的特性 120

7.3.3 通透比較器 124

7.4 無序關聯容器 126

7.4.1 哈希函數對象 126

7.4.2 無序關聯容器的接口 128

7.4.3 無序關聯容器的底層細節 128

7.5 容器適配器 130

7.5.1 queue 130

7.5.2 stack 131

7.5.3 priority_queue 132

7.6 性能說明 133

7.7 小結 133

第 8 章 迭代器 134

8.1 基本概念 134

8.1.1 迭代器的初步示例 134

8.1.2 ostream_range.h 對被輸出對象的要求 136

8.2 迭代器的類別 137

8.2.1 迭代器 138

8.2.2 輸入迭代器 140

8.2.3 前向迭代器 140

8.2.4 雙向迭代器 141

8.2.5 隨機訪問迭代器 141

8.2.6 連續迭代器 142

8.2.7 輸出迭代器 142

8.3 基於範圍的 for 循環 143

8.3.1 範圍表達式的生存期問題* 146

8.3.2 鍵–值對容器的遍歷 146

8.3.3 哨兵類型* 147

8.4 小結 149

第 9 章 標準算法 150

9.1 算法概述 150

9.2 一些常用算法 150

9.2.1 映射 150

9.2.2 歸約 151

9.2.3 過濾 152

9.2.4 生成 154

9.2.5 復制 155

9.2.6 搜索 157

9.2.7 排序 159

9.2.8 其他 160

9.3 並行算法 162

9.4 C++20 的範圍算法* 163

9.5 小結 166

第 10 章 視圖 167

10.1 視圖概述 167

10.2 string_view 167

10.2.1 基本用法 168

10.2.2 視圖的生存期問題 169

10.2.3 string_view 和 string 170

10.2.4 string_view 的哈希* 172

10.3 span 172

10.3.1 基本用法 172

10.3.2 一些技術細節 173

10.3.3 gsl::span 的性能問題 175

10.4 C++20 里的視圖* 175

10.4.1 映射 176

10.4.2 過濾 176

10.4.3 反轉 176

10.4.4 取子元素 177

10.4.5 管道和管道的性能 177

10.4.6 其他視圖 178

10.5 小結 179

第 11 章 智能指針 180

11.1 智能指針概述 180

11.2 唯一所有權的智能指針 unique_ptr 180

11.2.1 基本使用場景和示例 180

11.2.2 一些技術細節 182

11.3 共享所有權的智能指針 shared_ptr 183

11.3.1 基本使用場景和示例 183

11.3.2 弱指針 weak_ptr 184

11.3.3 引用計數的性能問題 185

11.4 智能指針的傳遞方式 186

11.5 刪除器的行為定製 187

11.6 小結 189

第 12 章 現代 C++ 的一些重要改進 190

12.1 類 190

12.1.1 類數據成員的默認初始化 190

12.1.2 override 和 final 191

12.2 靜態斷言 193

12.3 字面量 194

12.3.1 用戶定義字面量 194

12.3.2 二進制字面量 197

12.4 數字分隔符 198

12.5 constexpr 變量和函數* 199

12.5.1 字面類型 200

12.6 枚舉類和指定枚舉的底層類型 201

12.6.1 byte 類型 202

12.7 多元組 tuple 203

12.7.1 利用 tuple 的快速比較 204

12.8 時間庫 chrono 205

12.8.1 C++20 前的 chrono 庫 205

12.8.2 C++20 的 chrono 庫改進* 208

12.9 隨機數庫 random 210

12.10 正則表達式庫 regex 212

12.11 小結 215

第 13 章 契約和異常 216

13.1 契約式設計 216

13.1.1 契約式設計的優點、應用場景和實現方式 217

13.1.2 先決條件 219

13.1.3 後置條件 222

13.1.4 不變量 224

13.2 異常 225

13.2.1 不使用異常的 C 風格錯誤處理 226

13.2.2 使用異常的代碼示例 229

13.2.3 如何處理異常 231

13.2.4 不用異常的理由 234

13.2.5 不用異常的後果 236

13.3 小結 238

第 14 章 optional/variant 和錯誤處理 239

14.1 不使用異常的錯誤處理 239

14.2 optional 240

14.3 variant 242

14.3.1 訪問 variant 244

14.4 expected 246

14.5 標準錯誤碼 249

14.5.1 文件系統庫裡面的錯誤處理 249

14.5.2 集成自定義錯誤碼 251

14.6 返回值優化問題 253

14.7 小結 255

第 15 章 傳遞對象的方式 256

15.1 傳統的對象傳遞方式 256

15.2 性能優化的對象傳遞方式 258

15.2.1 針對移動的優化 258

15.2.2 該不該用值傳參? 259

15.2.3 “不可教授”的極致性能傳參方式* 264

15.2.4 字符串的特殊處理 266

15.3 小結 267

第 16 章 並發編程 268

16.1 並發編程概述 268

16.2 線程和鎖 269

16.2.1 線程和鎖的基本示例 270

16.2.2 thread 的析構問題 271

16.2.3 數據競爭示例 272

16.2.4 鎖的更多細節 273

16.3 通知機制 274

16.4 期值 278

16.4.1 async 和 future 278

16.4.2 promise 和 future 279

16.4.3 packaged_task 和 future 280

16.5 內存序和原子量 281

16.5.1 執行順序問題 281

16.5.2 獲得–釋放語義 286

16.5.3 atomic 288

16.6 線程局部對象 292

16.7 線程安全的容器? 296

16.7.1 標準容器的線程安全性 296

16.7.2 同步訪問的模板工具 297

16.7.3 支持並發訪問的容器 299

16.8 小結 300

第 17 章 異步編程 301

17.1 異步編程的基本概念 301

17.2 Asio 302

17.2.1 異步執行 302

17.2.2 異步回調 305

17.2.3 同步網絡程序 306

17.2.4 異步網絡程序 309

17.3 C++20協程 313

17.3.1 使用協程的異步網絡程序 313

17.3.2 使用協程的生成器* 316

17.3.3 有棧和無棧協程* 319

17.4 小結 321

第 18 章 探索 C++ 的工具 322

18.1 編譯器 322

18.1.1 主流編譯器簡介 322

18.1.2 優化選項 325

18.1.3 告警選項 326

18.1.4 編譯器的其他重要功能 327

18.1.5 標準庫的調試模式 328

18.2 Clang 系列工具 329

18.2.1 Clang-Format 329

18.2.2 Clang-Tidy 331

18.2.3 clangd 333

18.3 運行期檢查工具 333

18.3.1 valgrind 333

18.3.2 AddressSanitizer(ASan) 333

18.3.3 UndefinedBehaviorSanitizer(UBSan) 334

18.3.4 ThreadSanitizer(TSan) 335

18.4 Compiler Explorer 335

18.5 小結 336

結束語 337

推薦閱讀材料 338

索引 340