産品特色
編輯推薦
緊跟C++新11/14標準,詳細講解新特性,
深入探討"準標準庫"——Boost程序庫裏的迭代器、函數對象、流處理、模闆元編程和預處理元編程等高級組件
實用性強,幫助讀者深層次地理解掌握現代C++的高級技術和Boost的內部實現機製及用法。
內容豐富、組織得當、概念清晰、講解細緻,是廣大C++程序員和愛好者的必備好書。
內容簡介
C++的新標準(C++11/14)引入瞭許多強大易用的新特性新功能,從語言層麵深刻地改變瞭C++的開發範式。
Boost程序庫由C++標準委員會部分成員所設立的Boost社區開發並維護,它構造精巧、跨平颱、開源並且完全免費,被稱為“C++‘準’標準庫”,已廣泛應用在實際軟件開發中。Boost內容涵蓋智能指針、文本處理、並發、模闆元編程、預處理元編程等許多領域,其範圍之廣內涵之深甚至要超過C++11/14標準,極大地增強瞭C++的功能和錶現力。
本書基於C++新標準和Boost程序庫1.60版,深入探討瞭其中的許多特性和高級組件,包括迭代器、函數對象、容器、流處理以及C++語言中復雜並且頗具威力的模闆元編程和預處理元編程,具有較強的實用性,可幫助讀者深層次地理解掌握現代C++的高級技術和Boost的內部實現機製及用法。
全書內容豐富、結構閤理、概念清晰、講解細緻,是廣大C++程序員和愛好者的必備好書。
目錄
第0章 導讀 1
0.1 關於本書 1
0.2 讀者對象 2
0.3 C++標準 3
0.4 開發環境 3
0.5 代碼風格 3
0.6 本書的結構 4
0.7 如何閱讀本書 5
0.8 本書的源碼 6
第1章 全新的C++語言 7
1.1 概述 8
1.2 左值與右值 9
1.2.1 定義 9
1.2.2 右值引用 10
1.2.3 轉移語義 11
1.2.4 完美轉發 12
1.3 自動類型推導 13
1.3.1 auto 13
1.3.2 decltype 15
1.3.3 decltype(auto) 17
1.4 麵嚮過程編程 17
1.4.1 空指針 17
1.4.2 初始化 18
1.4.3 新式for循環 19
1.4.4 新式函數聲明 20
1.5 麵嚮對象編程 21
1.5.1 default 21
1.5.2 delete 22
1.5.3 override 23
1.5.4 final 24
1.5.5 成員初始化 25
1.5.6 委托構造 26
1.6 泛型編程 27
1.6.1 類型彆名 27
1.6.2 編譯期常量 28
1.6.3 靜態斷言 29
1.6.4 可變參數模闆 29
1.7 函數式編程 31
1.7.1 lambda錶達式 31
1.7.2 捕獲外部變量 32
1.7.3 類型轉換 34
1.7.4 泛型的lambda錶達式 35
1.8 並發編程 35
1.9 麵嚮安全編程 37
1.9.1 無異常保證 37
1.9.2 內聯名字空間 37
1.9.3 強類型枚舉 38
1.9.4 屬性 39
1.10 更多特性 39
1.10.1 語言版本號 39
1.10.2 超長整型 40
1.10.3 原始字符串 40
1.10.4 自定義字麵值 41
1.10.5 雜項 43
1.11 總結 44
第2章 模闆元編程簡介 45
2.1 概述 45
2.2 語法元素 46
2.3 元數據 46
2.4 元函數 47
2.5 元函數轉發 49
2.6 易用的工具宏 50
2.7 應用示例 51
2.8 總結 52
第3章 類型特徵萃取 55
3.1 概述 55
3.2 元數據類彆 56
3.2.1 基本類彆 56
3.2.2 復閤類彆 58
3.3 元數據屬性 60
3.3.1 基本屬性 60
3.3.2 類相關屬性 61
3.3.3 操作符重載屬性 62
3.4 元數據關係 62
3.5 元數據運算 63
3.5.1 基本運算 63
3.5.2 特殊運算 65
3.6 解析函數元數據 67
3.7 實現原理 68
3.7.1 integral_constant 68
3.7.2 is_integral 69
3.8 應用示例 70
3.8.1 conditional 70
3.8.2 identity_type 71
3.8.3 declval 72
3.9 總結 73
第4章 實用工具 75
4.1 compressed_pair 75
4.1.1 空類 75
4.1.2 類摘要 77
4.1.3 構造與賦值 78
4.1.4 用法 78
4.1.5 實現原理 79
4.1.6 功能擴展 80
4.2 checked_delete 83
4.2.1 函數的用法 84
4.2.2 函數對象的用法 85
4.2.3 帶檢查的刪除 87
4.2.4 實現原理 89
4.2.5 使用建議 90
4.3 addressof 90
4.3.1 用法 91
4.3.2 實現原理 92
4.3.3 使用建議 93
4.4 base_from_member 93
4.4.1 類摘要 93
4.4.2 用法 94
4.4.3 進一步的用法 96
4.5 conversion 98
4.5.1 標準轉型操作符 98
4.5.2 多態對象的轉型 99
4.5.3 polymorphic_downcast 101
4.5.4 polymorphic_cast 102
4.5.5 對引用轉型 103
4.6 numeric conversion 104
4.6.1 bounds 104
4.6.2 numeric_cast 107
4.7 pointer 108
4.7.1 get_pointer 108
4.7.2 pointer_cast 109
4.7.3 pointee 110
4.7.4 indirect_reference 111
4.7.5 pointer_to_other 111
4.7.6 compare_pointees 113
4.7.7 pointer_traits 114
4.8 總結 115
第5章 迭代器 117
5.1 概述 117
5.1.1 迭代器模式 117
5.1.2 標準迭代器 118
5.1.3 新式迭代器 119
5.1.4 標準迭代器工具 120
5.1.5 迭代器與算法 122
5.2 next_prior 122
5.2.1 函數聲明 123
5.2.2 用法 124
5.2.3 C++11/14標準 125
5.3 iterator_traits 125
5.3.1 標準迭代器特徵類 126
5.3.2 類摘要 127
5.3.3 用法 127
5.4 iterator_facade 128
5.4.1 迭代器的核心操作 128
5.4.2 類摘要 129
5.4.3 用法 131
5.5 iterator_adaptor 135
5.5.1 類摘要 135
5.5.2 用法 136
5.6 迭代器工具 139
5.6.1 共享容器迭代器 139
5.6.2 發生器迭代器 141
5.6.3 逆嚮迭代器 143
5.6.4 間接迭代器 144
5.6.5 計數迭代器 145
5.6.6 函數輸入迭代器 148
5.6.7 函數輸齣迭代器 151
5.6.8 過濾迭代器 153
5.6.9 轉換迭代器 155
5.6.10 索引迭代器 157
5.6.11 組閤迭代器 159
5.7 總結 161
第6章 區間 163
6.1 概述 163
6.2 特徵元函數 164
6.3 操作函數 165
6.4 標準算法 166
6.4.1 返迴原區間的算法 167
6.4.2 返迴定製區間的算法 168
6.5 迭代器區間類 170
6.5.1 類摘要 170
6.5.2 用法 171
6.6 輔助工具 173
6.6.1 sub_range 173
6.6.2 counting_range 174
6.6.3 istream_range 174
6.6.4 irange 175
6.6.5 combined_range 175
6.6.6 any_range 176
6.7 適配器 178
6.7.1 適配器列錶 178
6.7.2 用法 179
6.7.3 實現原理 180
6.8 其他議題 181
6.8.1 自定義區間類型 181
6.7.2 連接區間 182
6.9 總結 182
第7章 函數對象 185
7.1 hash 185
7.1.1 類摘要 186
7.1.2 用法 186
7.1.3 實現原理 187
7.1.4 擴展hash 188
7.2 mem_fn 191
7.2.1 工作原理 191
7.2.2 用法 192
7.2.3 其他議題 193
7.3 factory 194
7.3.1 類摘要 194
7.3.2 用法 195
7.3.3 value_factory 197
7.4 總結 197
第8章 指針容器 199
8.1 概述 199
8.1.1 入門示例 200
8.1.2 指針容器的優缺點 203
8.1.3 可剋隆概念 204
8.1.4 剋隆分配器 205
8.1.5 指針容器的分類 206
8.2 指針容器的共通功能 208
8.2.1 模闆參數 208
8.2.2 構造與賦值 210
8.2.3 訪問元素 211
8.2.4 其他功能 213
8.3 序列指針容器適配器 214
8.3.1 配置元函數 214
8.3.2 類摘要 215
8.3.3 接口解說 216
8.3.4 代碼示例 216
8.4 ptr_vector 217
8.4.1 類摘要 218
8.4.2 用法 219
8.5 空指針處理 220
8.5.1 禁用空指針 220
8.5.2 使用空指針 220
8.5.3 空對象模式 221
8.6 關聯指針容器的共通功能 223
8.6.1 類摘要 223
8.6.2 接口解說 224
8.7 集閤指針容器適配器 225
8.7.1 配置元函數 225
8.7.2 ptr_set_adapter 226
8.8 ptr_set 227
8.8.1 類摘要 227
8.8.2 用法 228
8.9 ptr_unordered_set 228
8.9.1 類摘要 228
8.9.2 用法 229
8.10 映射指針容器適配器 230
8.10.1 配置元函數 230
8.10.2 ptr_map_adapter 231
8.11 ptr_map 233
8.11.1 類摘要 233
8.11.2 用法 234
8.12 ptr_unordered_map 234
8.12.1 類摘要 235
8.12.2 用法 235
8.13 使用assign庫 236
8.13.1 嚮容器添加元素 236
8.13.2 初始化容器元素 237
8.14 使用算法 238
8.14.1 標準算法 238
8.14.2 序列指針容器的算法 242
8.14.3 關聯指針容器的算法 244
8.15 其他議題 246
8.15.1 異常 247
8.15.2 間接函數對象 247
8.15.3 插入迭代器 248
8.15.4 使用視圖分配器 248
8.15.5 可剋隆性的再討論 249
8.16 總結 250
第9章 侵入式容器 251
9.1 概述 251
9.1.1 手工實現鏈錶 252
9.1.2 intrusive庫介紹 253
9.2 入門示例 254
9.2.1 使用基類掛鈎 254
9.2.2 使用成員掛鈎 255
9.3 基本概念 257
9.3.1 節點 257
9.3.2 節點特徵 258
9.3.3 節點算法 258
9.3.4 值特徵 260
9.3.5 掛鈎 260
9.3.6 選項 262
9.3.7 處置器 263
9.3.8 剋隆 264
9.4 鏈錶 264
9.4.1 節點和算法 265
9.4.2 基類掛鈎 266
9.4.3 成員掛鈎 267
9.4.4 類摘要 267
9.4.5 基本用法 269
9.4.6 特有用法 271
9.5 有序集閤 275
9.5.1 節點和算法 275
9.5.2 基類掛鈎 276
9.5.3 成員掛鈎 277
9.5.4 set類摘要 277
9.5.5 基本用法 279
9.5.6 特有用法 280
9.6 無序集閤 282
9.6.1 節點和算法 282
9.6.2 基類掛鈎 283
9.6.3 成員掛鈎 284
9.6.4 類摘要 284
9.6.5 基本用法 286
9.6.6 unordered_set的特有用法 288
9.7 其他議題 290
9.7.1 鏈接模式 290
9.7.2 同時使用多個掛鈎 291
9.7.3 萬能掛鈎 293
9.8 總結 293
第10章 多索引容器 295
10.1 概述 295
10.2 入門示例 296
10.2.1 簡單的例子 296
10.2.2 復雜的例子 297
10.2.3 更復雜的例子 299
10.3 基本概念 302
10.3.1 索引 302
10.3.2 索引說明 303
10.3.3 鍵提取器 304
10.3.4 索引說明列錶 304
10.3.5 索引標簽 305
10.3.6 多索引容器 305
10.4 鍵提取器 306
10.4.1 定義 306
10.4.2 identity 307
10.4.3 member 308
10.4.4 const_mem_fun 310
10.4.5 mem_fun 311
10.4.6 global_fun 312
10.4.7 自定義鍵提取器 313
10.5 序列索引 313
10.5.1 索引說明 313
10.5.2 類摘要 314
10.5.3 用法 315
10.6 隨機訪問索引 317
10.6.1 索引說明 317
10.6.2 類摘要 317
10.6.3 用法 318
10.7 有序索引 320
10.7.1 索引說明 320
10.7.2 類摘要 320
10.7.3 基本用法 322
10.7.4 高級用法 323
10.8 散列索引 326
10.8.1 索引說明 326
10.8.2 類摘要 326
10.8.3 用法 327
10.9 修改元素 329
10.9.1 替換元素 329
10.9.2 修改元素 330
10.9.3 修改鍵 332
10.10 多索引容器 333
10.10.1 類摘要 333
10.10.2 用法 334
10.11 組閤索引鍵 337
10.11.1 類摘要 337
10.11.2 用法 338
10.11.3 輔助工具 339
10.12 總結 341
C++11/14 高級編程:Boost 程序庫探秘(第3版) 深入洞察現代C++的強大力量,駕馭Boost程序庫的無限潛能。 本書是您通往C++11/14高級編程藝術的終極指南,專注於揭示被譽為“C++界的瑞士軍刀”的Boost程序庫的奧秘。隨著C++標準的不斷演進,掌握現代C++的精髓以及如何利用強大的第三方庫來提升開發效率和代碼質量,已成為每一位資深C++開發者不可或缺的技能。本書第三版在繼承前兩版精髓的基礎上,全麵更新瞭內容,以匹配C++11和C++14的最新特性,並深入探討瞭Boost程序庫中那些最具價值、最能體現現代C++設計思想和實踐的應用。 本書為何與眾不同? 在浩瀚的C++編程書籍中,本書以其獨特的視角和深度脫穎而齣。我們不滿足於僅僅介紹C++語言的語法和基礎特性,而是將目光聚焦於如何運用這些特性來解決實際復雜問題。而Boost程序庫,正是實現這一目標的最強大助推器。它不僅提供瞭大量經過實踐檢驗、設計精良的組件,更重要的是,它率先引入瞭許多現代C++標準中最終采納的設計理念和技術。通過深入學習Boost,您將不僅能寫齣更簡潔、更安全、更高效的代碼,更能深刻理解C++未來的發展方嚮。 本書並非簡單地羅列Boost的各個組件,而是以一種係統化、結構化的方式,引導您理解Boost的核心思想,學習如何將其融會於您的日常開發流程中。我們注重概念的清晰闡述、原理的深入剖析,以及通過大量精心設計的代碼示例來直觀展示如何運用Boost解決實際編程挑戰。 您將學到什麼? 本書第三版涵蓋瞭Boost程序庫中極其豐富而強大的內容,這些內容不僅能顯著提升您的C++編程能力,更能讓您在麵對大型、復雜的項目時遊刃有餘。 核心概念與現代C++特性的融閤: 智能指針(Smart Pointers): 深入理解`shared_ptr`、`unique_ptr`、`weak_ptr`等智能指針的內部機製,學習它們如何實現高效的內存管理,避免內存泄漏和懸空指針問題。掌握RAII(Resource Acquisition Is Initialization)原則在Boost中的優雅實現,以及如何將其應用於各種資源管理場景。 函數對象與綁定(Function Objects and Bindings): 深入探索`std::function`和Boost的`bind`庫,學習如何創建、傳遞和組閤函數對象,實現更靈活的代碼復用和迴調機製。理解函數式編程範式在C++中的應用,以及Boost如何提供強大的支持。 麵嚮對象的元編程(Object-Oriented Metaprogramming): 學習Boost.MPL(Meta-Programming Library)等庫,理解模闆元編程的強大之處,如何在編譯時生成代碼,實現類型變換、屬性查詢等高級功能。這將是優化性能、提高代碼抽象度的關鍵。 並發與多綫程(Concurrency and Multithreading): 掌握Boost.Thread庫,學習如何創建和管理綫程,實現綫程同步(如互斥量、條件變量、信號量),以及如何利用異步操作來提高程序的響應速度和吞吐量。深刻理解C++11/14提供的內存模型和原子操作,並結閤Boost進行實踐。 Boost中不可或缺的實用組件: 容器與算法(Containers and Algorithms): 探索Boost提供的比標準庫更豐富、更高效的容器,如`boost::container`中的`flat_map`、`flat_set`等,理解它們在特定場景下的性能優勢。學習Boost.Range庫,它極大地簡化瞭對序列的訪問和操作,使算法的應用更加便捷和富有錶現力。 字符串處理(String Manipulation): 掌握Boost.String_Algo庫,學習高效、靈活的字符串分割、查找、替換、大小寫轉換等操作,告彆繁瑣的C風格字符串處理。 日期與時間(Date and Time): 深入瞭解Boost.Date_Time庫,學習如何精確處理日期、時間、時區,以及進行日期計算和格式化,滿足復雜的日程管理和時間戳處理需求。 文件係統操作(Filesystem Operations): 掌握Boost.Filesystem庫,學習如何跨平颱地進行文件和目錄的創建、刪除、復製、移動、遍曆等操作,極大地簡化瞭文件I/O編程。 序列化(Serialization): 學習Boost.Serialization庫,掌握如何將C++對象序列化為各種格式(如文本、二進製),以及如何反序列化,實現數據的持久化存儲和網絡傳輸。 正則錶達式(Regular Expressions): 深入理解Boost.Regex庫,學習如何編寫和應用正則錶達式,實現強大而靈活的文本模式匹配和提取。 網絡編程(Networking): 探索Boost.Asio庫,這是構建高性能、高並發網絡應用的基石。學習其異步I/O模型,掌握TCP/UDP通信、消息傳遞、協程等高級網絡編程技術。 單元測試(Unit Testing): 學習Boost.Test庫,掌握編寫健壯、可維護的單元測試,確保代碼的正確性和穩定性。 其他實用工具: 還會涉及Boost.Lexical_Cast(類型轉換)、Boost.Optional(可選值)、Boost.Variant(多態值)等一係列能顯著提升開發效率的工具。 麵嚮未來:C++20及以後展望: 本書在講解Boost組件時,會不時地將其與C++11/14/17的語言特性相結閤,甚至會提及一些在C++20及以後版本中已被采納或受到Boost啓發的新特性。例如,Coroutines、Modules等概念的早期探索和實踐,有助於您提前感知C++的未來趨勢。 誰適閤閱讀本書? 有一定C++基礎的開發者: 熟悉C++語法,瞭解麵嚮對象編程,並希望進一步提升技術棧的開發者。 追求代碼質量與性能的工程師: 希望通過更高級的技術和工具來編寫更健壯、更高效、更易於維護的代碼。 對現代C++感到好奇的開發者: 希望深入理解C++11/14帶來的新特性,並瞭解它們如何在實際項目中得到應用。 C++項目的中堅力量: 無論是進行係統級開發、遊戲開發、高性能計算、嵌入式係統,還是網絡服務開發,本書都將為您提供強大的理論和實踐支持。 希望瞭解Boost在工業界廣泛應用的開發者: Boost是眾多大型項目(如Linux內核、Windows驅動程序、各大數據庫、遊戲引擎等)的重要組成部分,掌握它將使您在求職和項目中更具競爭力。 本書的學習路徑與價值 本書的設計理念是循序漸進,由淺入深。我們從現代C++的核心概念齣發,逐步引入Boost程序庫的各個組件,並通過大量的實際應用場景來展示其威力。每一章都包含精心設計的代碼示例,您可以直接編譯運行,並通過修改和擴展來加深理解。 閱讀本書,您將獲得: 1. 精湛的C++編程技藝: 掌握現代C++的最佳實踐,寫齣更安全、更高效、更易讀的代碼。 2. 強大的Boost程序庫運用能力: 能夠自信地選擇和使用Boost中的各種組件,解決復雜的工程問題。 3. 深刻的工程設計思維: 理解RAII、模闆元編程、異步I/O等高級設計模式,提升係統設計和架構能力。 4. 對C++未來發展的洞察: 提前瞭解C++語言和程序庫的發展趨勢,為您的職業生涯做好長遠規劃。 5. 解決實際問題的能力: 無論是性能優化、並發處理、內存管理還是復雜數據結構的構建,本書都將提供行之有效的解決方案。 開啓您的C++高級編程之旅! “C++11/14 高級編程:Boost 程序庫探秘(第3版)”不僅是一本書,更是您在C++編程道路上的良師益友。它將幫助您跨越技術的鴻溝,擁抱現代C++的強大力量,在競爭激烈的技術領域脫穎而齣。立即開始您的探索之旅,釋放Boost程序庫的無限潛能,編寫齣色的C++代碼!