//z 2014-05-31 20:51:25 L.214'11315 BG57IV3@BYH T568499618 .K.F519279140 [T7,L115,R1,V13]
譯者序
前言
第一部分 基本工具
第1章 元組
1.1 頭文件的摘要
1.2 tuple類模板
1.3 像tuple同樣對std::pair進行存取
1.4 練習
第2章 智能指針
2.1 定義
2.2 關於示例
2.3 頭文件的摘要
2.4 shared_ptr類模板
2.5 類模板weak_ptr
2.6 類模板enable_shared_from_this
2.7 bad_weak_ptr類
2.8 轉換
2.9 受控資源的析構
2.10 異常
2.11 多線程
2.12 練習
第二部分 容器
第3章 基礎知識
3.1 STL部件
3.2 容器
3.3 進一步閱讀
3.4 練習
第4章 類模板array
4.1 類模板array概述
4.2 信息獲取
4.3 訪問
4.4 修改
4.5 迭代
4.6 內嵌類型名稱
4.7 比較
4.8 與tuple相似的接口
4.9 練習
第5章 無序關係容器
5.1 對散列表進行標準化
5.2 散列表
5.3 關係容器和無序容器
5.4 對無序容器的要求
5.5 頭文件和
5.6 類模板hash
5.7 無序容器的實例化
5.8 構造函數
5.9 容器操做
5.10 負載因子和重散列
5.11 優化
5.12 進一步閱讀
5.13 練習
第三部分 調用包裝器
第6章 調用包裝器基礎
6.1 術語
6.2 對可調用類型的要求
6.3 頭文件的摘要
6.4 類模板result_of
6.5 與現存的函數對象進行交互
6.6 練習
第7章 mem_fn函數模板
第8章 reference_wrapper類模板
8.1 建立
8.2 內嵌類型
8.3 調用
8.4 練習
第9章 類模板function
9.1 構造一個function對象
9.2 訪問
9.3 修改
9.4 比較
9.5 內嵌類型
9.6 調用
9.7 目標對象
9.8 練習
第10章 函數模板bind
10.1 佔位符
10.2 unspecified bind(…)
10.3 對bind進行擴展
10.4 練習
第四部分 類型特性
第11章 類型特性概述
11.1 頭文件
11.2 輔助類型
11.3 基本類型
11.4 複合類型
11.5 類型屬性
11.6 類型關係
11.7 類型變換
11.8 對齊
11.9 進一步閱讀
11.10 練習
第五部分 數值
第12章 數值函數
12.1 關於示例
12.2 浮點值的表示
12.3 管理浮點環境
12.4 無窮大、非規範數、NaN和比較
12.5 定義域和值域錯誤
12.6 新的重載規則
12.7 基本數學函數
12.8 數學特殊函數
12.9 複函數
12.10 進一步閱讀
12.11 練習
第13章 隨機數生成器
13.1 隨機數引擎
13.2 TR1中的引擎模板
13.3 TR1庫中的random_device類
13.4 TR1庫中的預約義引擎
13.5 隨機數分佈
13.6 離散分佈
13.7 連續分佈
13.8 類模板variate_generator
13.9 進一步閱讀
13.10 練習
第六部分 正則表達式
第14章 頭文件
第15章 正則表達式語法
15.1 正則表達式結構
15.2 語法特性
15.3 正則表達式細節
15.4 關於練習
15.5 練習
第16章 正則表達式對象
16.1 定義
16.2 頭文件的部分摘要
16.3 語法選項
16.4 basic_regex類模板
16.5 預約義的basic_regex類型
16.6 錯誤處理
16.7 練習
第17章 查找
17.1 頭文件的部分摘要
17.2 完整匹配
17.3 查找
17.4 查找選項
17.5 練習
第18章 查找結果
18.1 頭文件的部分摘要
18.2 sub_match類模板
18.3 預約義的sub_match類型
18.4 類模板match_results
18.5 練習
第19章 重複查找
19.1 暴力查找
19.2 regex_iterator類模板
19.3 regex_token_iterator類模板
19.4 練習
第20章 格式化和文本替換
20.1 格式化選項
20.2 格式化文本
20.3 文本替換
20.4 練習
第21章 正則表達式的定製
21.1 字符特性
21.2 locale
21.3 字符匹配
21.4 歸併
21.5 字符類別
21.6 regex_traits類模板
第七部分 C語言兼容
第22章 C語言兼容
22.1 整數類型
22.2 64位整數類型
22.3 固定大小的整數類型
22.4 文本轉換
22.5 格式化說明符
22.6 格式化I/O
22.7 字符分類
22.8 布爾類型
22.9 練習
附錄
附錄A 頭文件
附錄B 輔助頭文件
附錄C 多線程
參考文獻c++
//z 2014-05-31 20:51:25 L.214'11315 BG57IV3@BYH T568499618 .K.F519279140 [T7,L115,R1,V13]
正則表達式
《深刻理解c++11:c++11新特性解析與應用》
免責聲明
序
前言
第1章 新標準的誕生 1
1.1 曙光:c++11標準的誕生 1
1.1.1 c++11/c++0x(以及c11/c1x)—新標準誕生 1
1.1.2 什麼是c++11/c++0x 2
1.1.3 新c++語言的設計目標 3
1.2 今時今日的c++ 5
1.2.1 c++的江湖地位 5
1.2.2 c++11語言變化的領域 5
1.3 c++11特性的分類 7
1.4 c++特性一覽 11
1.4.1 穩定性與兼容性之間的抉擇 11
1.4.2 更傾向於使用庫而不是擴展語言來實現特性 12
1.4.3 更傾向於通用的而不是特殊的手段來實現特性 13
1.4.4 專家新手一律支持 13
1.4.5 加強類型的安全性 14
1.4.6 與硬件緊密合做 14
1.4.7 開發可以改變人們思惟方式的特性 15
1.4.8 融入編程現實 16
1.5 本書的約定 17
1.5.1 關於一些術語的翻譯 17
1.5.2 關於代碼中的註釋 17
1.5.3 關於本書中的代碼示例與實驗平臺 18
第2章 保證穩定性和兼容性 19
2.1 保持與c99兼容 19
2.1.1 預約義宏 19
2.1.2 __func__預約義標識符 20
2.1.3 _pragma操做符 22
2.1.4 變長參數的宏定義以及__va_args__ 22
2.1.5 寬窄字符串的鏈接 23
2.2 long long整型 23
2.3 擴展的整型 25
2.4 宏__cplusplus 26
2.5 靜態斷言 27
2.5.1 斷言:運行時與預處理時 27
2.5.2 靜態斷言與static_assert 28
2.6 noexcept修飾符與noexcept操做符 32
2.7 快速初始化成員變量 36
2.8 非靜態成員的sizeof 39
2.9 擴展的friend語法 40
2.10 final/override控制 44
2.11 模板函數的默認模板參數 48
2.12 外部模板 50
2.12.1 爲何須要外部模板 50
2.12.2 顯式的實例化與外部模板的聲明 52
2.13 局部和匿名類型做模板實參 54
2.14 本章小結 55
第3章 通用爲本,專用爲末 57
3.1 繼承構造函數 57
3.2 委派構造函數 62
3.3 右值引用:移動語義和完美轉發 68
3.3.1 指針成員與拷貝構造 68
3.3.2 移動語義 69
3.3.3 左值、右值與右值引用 75
3.3.4 std::move:強制轉化爲右值 80
3.3.5 移動語義的一些其餘問題 82
3.3.6 完美轉發 85
3.4 顯式轉換操做符 89
3.5 列表初始化 92
3.5.1 初始化列表 92
3.5.2 防止類型收窄 96
3.6 pod類型 98
3.7 非受限聯合體 106
3.8 用戶自定義字面量 110
3.9 內聯名字空間 113
3.10 模板的別名 118
3.11 通常化的sfinea規則 119
3.12 本章小結 121
第4章 新手易學,老兵易用 123
4.1 右尖括號]的改進 123
4.2 auto類型推導 124
4.2.1 靜態類型、動態類型與類型推導 124
4.2.2 auto的優點 126
4.2.3 auto的使用細則 130
4.3 decltype 134
4.3.1 typeid與decltype 134
4.3.2 decltype的應用 136
4.3.3 decltype推導四規則 140
4.3.4 cv限制符的繼承與冗餘的符號 143
4.4 追蹤返回類型 145
4.4.1 追蹤返回類型的引入 145
4.4.2 使用追蹤返回類型的函數 146
4.5 基於範圍的for循環 150
4.6 本章小結 153
第5章 提升類型安全 155
5.1 強類型枚舉 155
5.1.1 枚舉:分門別類與數值的名字 155
5.1.2 有缺陷的枚舉類型 156
5.1.3 強類型枚舉以及c++11對原有枚舉類型的擴展 160
5.2 堆內存管理:智能指針與垃圾回收 163
5.2.1 顯式內存管理 163
5.2.2 c++11的智能指針 164
5.2.3 垃圾回收的分類 167
5.2.4 c++與垃圾回收 169
5.2.5 c++11與最小垃圾回收支持 170
5.2.6 垃圾回收的兼容性 172
5.3 本章小結 173
第6章 提升性能及操做硬件的能力 174
6.1 常量表達式 174
6.1.1 運行時常量性與編譯時常量性 174
6.1.2 常量表達式函數 176
6.1.3 常量表達式值 178
6.1.4 常量表達式的其餘應用 180
6.2 變長模板 183
6.2.1 變長函數和變長的模板參數 183
6.2.2 變長模板:模板參數包和函數參數包 185
6.2.3 變長模板:進階 189
6.3 原子類型與原子操做 196
6.3.1 並行編程、多線程與c++11 196
6.3.2 原子操做與c++11原子類型 197
6.3.3 內存模型,順序一致性與memory_order 203
6.4 線程局部存儲 214
6.5 快速退出:quick_exit與at_quick_exit 216
6.6 本章小結 219
第7章 爲改變思考方式而改變 220
7.1 指針空值—nullptr 220
7.1.1 指針空值:從0到null,再到nullptr 220
7.1.2 nullptr和nullptr_t 223
7.1.3 一些關於nullptr規則的討論 225
7.2 默認函數的控制 227
7.2.1 類與默認函數 227
7.2.2 「= default」與「= deleted」 230
7.3 lambda函數 234
7.3.1 lambda的一些歷史 234
7.3.2 c++11中的lambda函數 235
7.3.3 lambda與仿函數 238
7.3.4 lambda的基礎使用 240
7.3.5 關於lambda的一些問題及有趣的實驗 243
7.3.6 lambda與stl 247
7.3.7 更多的一些關於lambda的討論 254
7.4 本章小結 256
第8章 融入實際應用 258
8.1 對齊支持 258
8.1.1 數據對齊 258
8.1.2 c++11的alignof和alignas 261
8.2 通用屬性 267
8.2.1 語言擴展到通用屬性 267
8.2.2 c++11的通用屬性 268
8.2.3 預約義的通用屬性 270
8.3 unicode支持 274
8.3.1 字符集、編碼和unicode 274
8.3.2 c++11中的unicode支持 276
8.3.3 關於unicode的庫支持 280
8.4 原生字符串字面量 284
8.5 本章小結 286
附錄a c++11對其餘標準的不兼容項目 287
附錄b 棄用的特性 294
附錄c 編譯器支持 301
附錄d 相關資源 304
//z 2014-05-19 22:56:49 L.226' 3791 BG57IV3@BYH T1268850545.K.F1106431554[T20,L309,R2,V317]
api design for c++
目 錄
第1章 API簡介 1
1.1 什麼是API 1
1.1.1 契約和承包人 2
1.1.2 C 中的API 3
1.2 API設計上有什麼不一樣 4
1.3 爲何使用API 5
1.3.1 更健壯的代碼 6
1.3.2 代碼複用 6
1.3.3 並行開發 8
1.4 什麼時候應當避免使用API 9
1.5 API示例 10
1.5.1 API層次 10
1.5.2 真實示例 12
1.6 文件格式和網絡協議 13
1.7 關於本書 15
第2章 特徵 17
2.1 問題域建模 17
2.1.1 提供良好的抽象 17
2.1.2 關鍵對象的建模 19
2.2 隱藏實現細節 20
2.2.1 物理隱藏:聲明與定義 20
2.2.2 邏輯隱藏:封裝 22
2.2.3 隱藏成員變量 23
2.2.4 隱藏實現方法 26
2.2.5 隱藏實現類 28
2.3 最小完備性 29
2.3.1 不要過分承諾 29
2.3.2 謹慎添加虛函數 30
2.3.3 便捷API 31
2.4 易用性 33
2.4.1 可發現性 34
2.4.2 不易誤用 34
2.4.3 一致性 36
2.4.4 正交 38
2.4.5 健壯的資源分配 40
2.4.6 平臺獨立 43
2.5 鬆耦合 44
2.5.1 僅經過名字耦合 45
2.5.2 下降類耦合 45
2.5.3 刻意的冗餘 47
2.5.4 管理器類 48
2.5.5 回調、觀察者和通知 50
2.6 穩定的、文檔詳細且通過測試的API 53
第3章 模式 54
3.1 Pimpl慣用法 55
3.1.1 使用Pimpl 56
3.1.2 複製語義 59
3.1.3 Pimpl與智能指針 60
3.1.4 Pimpl的優勢 61
3.1.5 Pimpl的缺點 62
3.1.6 C語言的不透明指針 62
3.2 單例 64
3.2.1 在C 中實現單例 64
3.2.2 使單例線程安全 66
3.2.3 單例與依賴注入 68
3.2.4 單例與單一狀態 69
3.2.5 單例與會話狀態 71
3.3 工廠模式 71
3.3.1 抽象基類 72
3.3.2 工廠示例 73
3.3.3 擴展工廠示例 74
3.4 API包裝器模式 76
3.4.1 代理模式 76
3.4.2 適配器模式 79
3.4.3 外觀模式 81
3.5 觀察者模式 83
3.5.1 MVC架構 83
3.5.2 實現觀察者模式 84
3.5.3 推與拉觀察者 87
第4章 設計 88
4.1 良好設計的例子 89
4.1.1 積累技術債 89
4.1.2 償還技術債 90
4.1.3 爲長期而設計 91
4.2 收集功能性需求 92
4.2.1 什麼是功能性需求 93
4.2.2 功能性需求舉例 94
4.2.3 維護需求 94
4.3 建立用例 95
4.3.1 開發用例 95
4.3.2 用例模板 95
4.3.3 編寫高質量用例 96
4.3.4 需求與敏捷開發 98
4.4 API設計的元素 100
4.5 架構設計 102
4.5.1 架構的開發 103
4.5.2 架構的約束 104
4.5.3 識別主要抽象 105
4.5.4 創造關鍵對象 106
4.5.5 架構模式 109
4.5.6 架構的交流 110
4.6 類的設計 111
4.6.1 面向對象概念 112
4.6.2 類設計選項 113
4.6.3 使用繼承 113
4.6.4 Liskov替換原則 115
4.6.5 開放?封閉原則 118
4.6.6 迪米特法則 119
4.6.7 類的命名 120
4.7 函數設計 121
4.7.1 函數設計選項 121
4.7.2 函數命名 122
4.7.3 函數參數 123
4.7.4 錯誤處理 125
第5章 風格 129
5.1 純C API 129
5.1.1 ANSI C特性 130
5.1.2 ANSI C API的優勢 132
5.1.3 使用ANSI C編寫API 132
5.1.4 從C 中調用C函數 134
5.1.5 案例研究:FMOD C API 135
5.2 面向對象的C API 136
5.2.1 面向對象API的優勢 136
5.2.2 面向對象API的缺點 136
5.2.3 案例研究:FMOD C API 137
5.3 基於模板的API 138
5.3.1 基於模板的API示例 138
5.3.2 模板與宏 139
5.3.3 基於模板的API的優勢 140
5.3.4 基於模板的API的缺點 141
5.4 數據驅動型API 141
5.4.1 數據驅動型Web服務 142
5.4.2 數據驅動型API的優勢 143
5.4.3 數據驅動API的缺點 144
5.4.4 支持可變參數列表 144
5.4.5 案例研究:FMOD數據驅動型API 147
第6章 C 用法 149
6.1 命名空間 149
6.2 構造函數和賦值 150
6.2.1 控制編譯器生成的函數 152
6.2.2 定義構造函數和賦值操做符 153
6.2.3 explicit關鍵字 154
6.3 const正確性 155
6.3.1 方法的const正確性 155
6.3.2 參數的const正確性 157
6.3.3 返回值的const正確性 157
6.4 模板 158
6.4.1 模板術語 158
6.4.2 隱式實例化API設計 160
6.4.3 顯式實例化API設計 162
6.5 操做符重載 164
6.5.1 可重載的操做符 164
6.5.2 自由操做符與成員操做符 165
6.5.3 爲類添加操做符 166
6.5.4 操做符語法 168
6.5.5 轉換操做符 170
6.6 函數參數 171
6.6.1 指針與引用參數 171
6.6.2 默認參數 172
6.7 避免使用#define定義常量 173
6.8 避免使用友元 175
6.9 導出符號 176
6.10 編碼規範 179
第7章 性能 181
7.1 經過const引用傳遞輸入參數 182
7.2 最小化#include依賴 184
7.2.1 避免「無所不包型」頭文件 184
7.2.2 前置聲明 184
7.2.3 冗餘的#include警惕語句 186
7.3 聲明常量 188
7.4 初始化列表 190
7.5 內存優化 192
7.6 除非須要,勿用內聯 196
7.7 寫時複製 198
7.8 迭代元素 202
7.8.1 迭代器 202
7.8.2 隨機訪問 203
7.8.3 數組引用 204
7.9 性能分析 205
7.9.1 時效性分析 205
7.9.2 基於內存的分析 207
7.9.3 多線程分析 208
第8章 版本控制 209
8.1 版本號 209
8.1.1 版本號的意義 209
8.1.2 小衆的編號方案 210
8.1.3 提供API的版本信息 211
8.2 軟件分支策略 213
8.2.1 分支策略 213
8.2.2 分支方針 213
8.2.3 API和並行分支 214
8.2.4 文件格式和並行發佈產品 215
8.3 API的生命週期 216
8.4 兼容性級別 217
8.4.1 向後兼容性 217
8.4.2 功能兼容性 218
8.4.3 源代碼兼容性 218
8.4.4 二進制兼容性 219
8.4.5 向前兼容性 221
8.5 怎樣維護向後兼容性 222
8.5.1 添加功能 222
8.5.2 修改功能 223
8.5.3 棄用功能 224
8.5.4 移除功能 226
8.6 API審查 226
8.6.1 API審查的目的 226
8.6.2 API預發佈審查 227
8.6.3 API預提交審查 228
第9章 文檔 230
9.1 編寫文檔的理由 230
9.1.1 定義行爲 230
9.1.2 爲接口契約編寫文檔 232
9.1.3 告知行爲的改變 233
9.1.4 文檔涉及的內容 234
9.2 文檔的類型 236
9.2.1 自動生成的API文檔 237
9.2.2 概述文檔 237
9.2.3 示例和教程 238
9.2.4 發佈說明 238
9.2.5 受權信息 239
9.3 文檔可用性 241
9.4 使用Doxygen 242
9.4.1 配置文件 242
9.4.2 註釋風格和命令 242
9.4.3 API註釋 243
9.4.4 文件註釋 245
9.4.5 類註釋 245
9.4.6 方法註釋 246
9.4.7 枚舉註釋 247
9.4.8 帶有文檔的示例頭文件 247
第10章 測試 250
10.1 編寫測試的理由 250
10.2 API測試的類型 252
10.2.1 單元測試 253
10.2.2 集成測試 255
10.2.3 性能測試 257
10.3 編寫良好的測試 259
10.3.1 良好測試的特徵 259
10.3.2 測試對象 260
10.3.3 關注測試工做量 261
10.3.4 與QA一塊兒工做 261
10.4 編寫可測試的代碼 262
10.4.1 測試驅動開發 262
10.4.2 樁對象和模擬對象 264
10.4.3 測試私有代碼 267
10.4.4 使用斷言 269
10.4.5 契約編程 270
10.4.6 記錄並重放功能 272
10.4.7 支持國際化 273
10.5 自動化測試工具 273
10.5.1 自動化測試框架 274
10.5.2 代碼覆蓋率 277
10.5.3 缺陷跟蹤系統 279
10.5.4 持續構建系統 280
第11章 腳本化 282
11.1 添加腳本綁定 282
11.1.1 擴充或嵌入 282
11.1.2 腳本化的優勢 283
11.1.3 語言兼容性問題 284
11.1.4 跨越語言障礙 285
11.2 腳本綁定技術 286
11.2.1 Boost Python 286
11.2.2 SWIG 286
11.2.3 Python-SIP 287
11.2.4 自動化 287
11.2.5 CORBA 288
11.3 使用Boost Python添加Python綁定 289
11.3.1 構建Boost Python 290
11.3.2 使用Boost Python包裝C API 290
11.3.3 構造函數 292
11.3.4 擴充Python API 293
11.3.5 C 中的繼承 295
11.3.6 跨語言多態 296
11.3.7 支持迭代器 298
11.3.8 綜合應用 298
11.4 使用SWIG添加Ruby綁定 300
11.4.1 使用SWIG包裝C API 301
11.4.2 調整Ruby API 303
11.4.3 構造函數 304
11.4.4 擴充Ruby API 304
11.4.5 C 中的繼承 305
11.4.6 跨語言多態 307
11.4.7 綜合應用 307
第12章 可擴展性 310
12.1 經過插件擴展 310
12.1.1 插件模型概覽 311
12.1.2 插件系統設計問題 313
12.1.3 以C 實現插件 314
12.1.4 插件API 315
12.1.5 插件示例 317
12.1.6 插件管理器 318
12.1.7 插件版本控制 321
12.2 經過繼承擴展 322
12.2.1 添加功能 322
12.2.2 修改功能 323
12.2.3 繼承與STL 324
12.2.4 繼承與枚舉 325
12.2.5 訪問者模式 326
12.2.6 禁止子類化 331
12.3 經過模板擴展 332
12.3.1 基於策略的模板 332
12.3.2 奇特的遞歸模板模式 334
附錄A 庫 336
參考文獻 351
索引 355