注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡軟件與程序設計C/C++及其相關(guān)Imperfect C++中文版

Imperfect C++中文版

Imperfect C++中文版

定 價:¥75.00

作 者: Matthew Wilson 著
出版社: 人民郵電出版社
叢編項:
標 簽: C++

ISBN: 9787115136848 出版時間: 2006-01-01 包裝: 平裝
開本: 16開 頁數(shù): 591 字數(shù):  

內(nèi)容簡介

即便是C++陣營里最忠實的信徒,也不得不承認:C++語言并不完美。實際上,世界上也沒有完美的編程語言。.如何克服C++類型系統(tǒng)的不足?在C++中,如何利用約束、契約和斷言來實施軟件設計?如何處理被C++標準所忽略的動態(tài)庫、靜態(tài)對象以及線程等有關(guān)的問題?隱式轉(zhuǎn)換有何替代方案?本書將為你—一—解答這些問題。針對C++的每一個不完美之處,本書都具體地分析原因,并探討實用的解決方案。書中也不乏許多作者創(chuàng)新的、你從未聽說過或使用的技術(shù),但這些確實能幫助你成為C++方面的專家。..本書適合有一定經(jīng)驗的C++程序員和項目經(jīng)理閱讀,也適合對C++編程的一些專門或高級話題感興趣的讀者參考。本書不僅指出了C++的缺失,更為你編寫健壯、靈活、高效,可維護的代碼提供了實用的技術(shù)和工具。Wilson向你展示了如何克服C++的復雜性,穿越C++龐大的范式陣列,奪回對代碼的控制權(quán),從而獲得更理想的結(jié)果。通過本書,你將學會如何:克服C++類型系統(tǒng)的不足。利用約束,契約和斷言來實季軟件設計。處理被C++標準所忽略的行為,包括與動態(tài)庫、靜態(tài)對象以及線程有關(guān)的議題。在動態(tài)加載的組件之間達成二進制兼容。理解隱式轉(zhuǎn)換的代價和缺點及其替代方案。增強在不同的編譯器、庫以及操作環(huán)境下的兼容性。使你的編譯器能夠偵測出更多的錯誤并且更高效地工作。了解代碼風格的哪些方面會對可靠性造成影響。將“資源獲取即初始化”技術(shù)運用到各種各樣的問題領(lǐng)域中。應付數(shù)組和指針之間(有些時候)近乎神秘的關(guān)系。擴展C++,包括快速的字符串拼接、真正的NULL指針、靈活的緩存區(qū)、屬性、多維數(shù)組以及區(qū)間。...

作者簡介

  MatthewWilson是一名軟件開發(fā)顧問,STLSoft庫的創(chuàng)建者。他為雙月刊C/C++UsersJournal撰寫關(guān)于將C/C++與其他語言和技術(shù)進行整合的專欄文章,同時亦是C++ExpertsForum在線專欄作家。Wilson有十余年C++開發(fā)經(jīng)驗。目前定居于澳大利亞。他擁有英國曼徹斯特大學博士學位。榮耀,是南京師范大學教師。他是一名C++講師和研究者。譯有《C++必知必會》、《C++Templates全覽》以及《C++模板超編程》(中文繁體版)等,并在期刊雜志上發(fā)表過多篇文章。他原任電力自動化研究院工程師與項目經(jīng)理,是數(shù)個企業(yè)級信息系統(tǒng)項目負責人。詳見www.royaloo.com。劉未鵬,畢業(yè)于南京大學軟件學院,熱愛C++,長期關(guān)注于C++前沿技術(shù),對C++有較深的研究。曾在《程序員》上發(fā)表文章數(shù)篇。個人blog是http://blog.csdn.net/pongba。郵箱:pp_liu@msn.com。

圖書目錄

第一部分 基礎知識1
第1章 強制設計:約束、契約和斷言.3
1.1 綠蛋和火腿4
1.2 編譯期契約:約束.4
1.2.1 musthavebase()5
1.2.2 mustbesubscriptableO6
1.2.3 mustbesubscriptableas_decayable_pointer()6
1.2.4 mustbepod
1.2.5 must_besame_size()-9
1.2.6 使用約束10
1.2.7 約束和TMPll
1.2.8 約束:尾聲1l
1.3 運行期契約:前置條件、后置條件和不變式12
1.3.1 前置條件13
1.3.2 后置條件l3
1.3.3 類不變式-15
1.3.4 檢查?總是進行16
1.3.5 DbC還是不DbC17
1.3.6 運行期契約:尾聲7
1.4 斷言18
1.4.1 獲取消息19
1.4.2 不恰當?shù)臄嘌?20
1.4.3 語法以及64位指針21
1.4.4 避免使用verifV()21
1.4.5 為你的斷言命名22
1.4.6 避免使用#ifdefDEBUG.23
1.4.7 DebugBreak()和int324
1.4.8 靜態(tài)/編譯期斷言..24
1.4.9 斷言:尾聲.26
第2章 對象生命期27
2.1 對象生命周期..27
2.2 控制你的客戶端..28
2.2.1 成員類型..28
2.2.2 缺省構(gòu)造函數(shù)28
2.2.3 拷貝構(gòu)造函數(shù)29
2.2.4 拷貝賦值29
2.2.5 new和delete30
2.2.6 虛析構(gòu)30
2.2.7 explicit3l
2.2.8 析構(gòu)函數(shù)31
2.2.9 友元32
2.3 MIL及其優(yōu)點.33
2.3.1 取得一塊更大的場地35
2.3.2 成員順序依賴37
2.3.3 offsetoff)38
2.3.4 MLL:尾聲39
第3章 資源封裝40
3.1 資源封裝分類一40
3.2 POD類型.4l
3.2.1 直接操縱41
3.2.2 API函數(shù)和透明類型42
3.2.3 API函數(shù)和不透明類型,42
3.3 外覆代理類43
3.4 RRID類型一45
3.4.1 缺省初始化:緩式初始化46
3.4.2 未初始化48
3.5 RAII類型51
3.5.1 常性RAII和易變性RAIl51
3.5.2 內(nèi)部初始化和外部初始化53
3.5.3 RAIl排列--53
3.6 RAII:尾聲54
3.6.1 不變式54
3.6.2 錯誤處理54
第4章 數(shù)據(jù)封裝和值類型-55
4.1 數(shù)據(jù)封裝的分類學55
4.2 值類型和實體類型56
4.3 值類型的分類學56
4.4 開放式類型58
4.4.1 POD開放式類型-58
4.4.2 C++數(shù)據(jù)結(jié)構(gòu)59
4.5 封裝式類型60
4.6 值類型6l
4.7 算術(shù)值類型62
4.8 值類型:尾聲63
4.9 封裝:尾聲64
第5章 對象訪問模型68
5.1 確定性生命期68
5.2 返回拷貝70
5.3 直接交給調(diào)用者70
5.4 共享對象71
第6章 域守衛(wèi)類73
6.1 值 73
6.2 狀態(tài)-78
6.3 API和服務83
6.3.1 API83
6.3.2 服務86
6.4 語言特性87
第二部分生存在現(xiàn)實世界89
第7章 ABI9l
7.1 共享代碼91
7.2 CABI需求93
7.2.1 結(jié)構(gòu)布局93
7.2.2 調(diào)用約定、符號名以及目標文件格式94
7.2.3 靜態(tài)連接94
7.2.4 動態(tài)連接95
7.3 C++ABI需求96
7.3.1 對象布局97
7.3.2 虛函數(shù)97
7.3.3 調(diào)用約定和名字重整97
7.3.4 靜態(tài)連接99
7.3.5 動態(tài)連接99
7.4 現(xiàn)在知道怎么做了100
7.4.1 extern“C”100
7.4.2 名字空間103
7.4.3 extern“C++”-103
7.4.4 獲得c++類的句柄106
7.4.5 “由實現(xiàn)定義”的隱患108
第8章 跨邊界的對象-110
8.1 近乎可移植的虛函數(shù)表.110
8.1.1 虛函數(shù)表布局..11J
8.1.2 動態(tài)操縱虛函數(shù)表-113
8.2 可移植的虛函數(shù)表114
8.2.1 利用宏進行簡化116
8.2.2 兼容的編譯器--116
8.2.3 可移植的服務端對象117
8.2.4 簡化可移植接口的實現(xiàn)119
8.2.5 C客戶代碼一120
8.2.6 OAB的約束120
8.3 ABI/OAB尾聲121
第9章 動態(tài)庫-123
9.1 顯式調(diào)用函數(shù)123
9.1.1 顯式調(diào)用C++函數(shù)124
9.1.2 打破c++訪問控制125
9.2 同一性:連接單元和連接空間125
9.2.1 連接單元125
9.2.2連接空間-.126
9.2.3 多重身份126
9.3 生命期127
9.4 版本協(xié)調(diào)128
9.4.1 丟失的函數(shù)..128
9.4.2 變化的簽名一128
9.4.3 行為的改變一129
9.4.4 常量-.129
9.5 資源所有權(quán)130
9.5.1 共享池-130
9.5.2 返還給被調(diào)用方”130
9.6 動態(tài)庫:尾聲.131
第10章 線程.132
10.1 對整型值的同步訪問133
10.1.1 操作系統(tǒng)函數(shù)134
10.1.2 原子類型135
10.2 對(代碼)塊的同步訪問:臨界區(qū)136
10.2.1 進程間互斥體和進程內(nèi)互斥體一137
10.2.2 自旋互斥體138
10.3 原子整型的性能139
10.3.1 基于互斥體的原子整型139
10.3.2 運行期按架構(gòu)派發(fā)141
10.3.3 性能比較142
10.3.4 原子整型操作:尾聲143
10.4 多線程擴展144
10.4.1 synchronized‘144
10.4.2 匿名synchronized147
10.4.3 atomic147
10.5 線程相關(guān)的存儲148
10.5.1 重入148
10.5.2 線程相關(guān)的數(shù)據(jù)/線程局部存儲148
10.5.3 declspec(thread)和TLS150
10.5.4 Tss庫150
10.5.5 TSS的性能155
第11章 靜態(tài)對象156
11.1 非局部靜態(tài)對象:全局對象157
11.1.1 編譯單元內(nèi)的順序性158
11.1.2 編譯單元間的順序性159
11.1.3 利用main()避免全局變量161
11.1.4 全局對象尾聲:順序性162
11.2 單件163
11.2.1 Meyers單件163
11.2.2 Alexandrescu單件164
11.2.3 p時Schwarz計數(shù)器:一個極妙的主意165
11.2.4 對API計數(shù)166
11.2.5 被計數(shù)的API、外覆類、代理類:最終得到一個順序化的單件168
ll.3  函數(shù)范圍內(nèi)的靜態(tài)對象169
11.3.1 犧牲緩式求值能力171
11.3.2 自旋互斥體是救星171
11.4 靜態(tài)成員172
11.4.1 解決連接問題172
11.4.2 自適應代碼174
11.5 靜態(tài)對象:尾聲175
第12章 優(yōu)化176
12.1 內(nèi)聯(lián)函數(shù)176
12.1.1 警惕過早優(yōu)化176
12.1.2 只含有頭文件的庫177
12.2 返回值優(yōu)化一177
12.3 空基類優(yōu)化一180
12.4 空派生類優(yōu)化183
12.5 阻止優(yōu)化一184
第三部分 語言相關(guān)的議題-.188
第13章 基本類型189
13.1 可以給我來一個字節(jié)嗎189
13.1.1 標明符號190
13.1.2 一切都在名字之中190
13.1.3 窺探void內(nèi)部191
13.1.4額外的安全性191
13.2 固定大小的整型192
13.2.1 平臺無關(guān)性193
13.2.2 類型相關(guān)的行為一195
13.2.3 固定大小的整型:尾聲197
13.3 大整型198
13.4 危險的類型-200
13.4.1 引用和臨時對象200
13.4.2 bool201
第14章 數(shù)組和指針204
14.1 不要重復你自己204
14.2 數(shù)組退化為指針206
14.2.1 下標索弓f操作符的交換性206
14.2.2 阻止退化208
14.3 dimensiono()209
14.4 無法將數(shù)組傳遞給函數(shù)211
14.5  數(shù)組總是按地址進行傳遞214
14.6 派生類的數(shù)組215
14.6.1 通過指針保存多態(tài)類型-216
14.6.2 提供非缺省的構(gòu)造函數(shù)217
14.6.3 隱藏向量式new和delete-218
14.6.4 使用std::vector一218
14.6.5 確保類型的大小相同219
14.7 不能擁有多維數(shù)組222
第15章 值--226
15.1 NULL的是非曲直226
15.2 回到0一232
15.3 屈服于事實235
15.4 字面量”236
15.4.1 整型236
15.4.2 后綴238
15.4.3 字符串240
15.5 常量一243
15.5.1 簡單常量243
15.5.2 類類型常量244
15.5.3 成員常量245
15.5.4 類類型的成員常量248
第16章 關(guān)鍵字251
16..2 51.1interface
16.2 temporary。’253
16.3 owner---256
16.4 explicit(一cast)-.261
16.4.1 使用顯式訪問函數(shù)263
16.4.2 模擬顯式轉(zhuǎn)換264
16.4.3 使用特性墊片265
16.5 unique266
16.6 final267
16.7 不被支持的關(guān)鍵字267
第17章 語法270
17.1 類的代碼布局270
17.2 條件表達式-.273
17.2.1 “使它布爾”273
17.2.2 一個危險的賦值275
17.3 for277
17.3.1 初始化作用域277
17.3.2 異質(zhì)初始化類型278
17.4 變量命名280
17.4.1 匈牙利命名法280
17.4.2 成員變量281
第18章 Typedef-284
18.1 指針typedef286
18.2 定義里面有什么288
18.2.1 概念性的類型定義288
18.2.2 上下文相關(guān)的類型定義289
18.3 別名-292
18.3.1 錯誤的概念性類型互換293
18.3.2 不能對概念性類型進行重載294
18.4 true-typedef294
18.5 好的、壞的、丑陋的300
18.5.1 好的typedef300
18.5.2 壞的typedef303
18.5.3 可疑的typedef304
第四部分 感知式轉(zhuǎn)換308
第19章 強制310
19.1 隱式轉(zhuǎn)換310
19.2 C++中的強制311
19.3 適合使用C強制的場合312
19.4 模仿強制314
19.5 explicitcast-316
19.6 literaI-cast32l
19.7 union_cast323
19.8 comstl::interface cast327
19.8 comstl::interface-cast_addref328
19.8.2 interface--cast--noaddref329
19.8.3 interface-casLtest329
19.8.4 接口強制操作符的實現(xiàn)330
19.8.5 保護引用計數(shù)333
19.8.6 interface-cast-base334
19.8.7 IID-traits’335
19.8.8 interfacecast尾聲336
19.9 boost::polymorphic_cast‘。337
19.10 強制:尾聲.339
第20章 墊片..341
20.1 擁抱變化擁抱自由.341
20.2 特性墊片344
20.3 邏輯墊片346
20.4 控制墊片347
20.5 轉(zhuǎn)換墊片348
20.6 復合式墊片概念350
20.6.1 訪問墊片351
20.6.2 返回值生命期352
20.6.3 泛化的類型操縱354
20.6.4 效率方面的考慮356
20.7 名字空間和Koenig查找-357
20.8 為何不使用traits359
20.9 結(jié)構(gòu)一致性一360
20.10 打破巨石362
20.11 墊片:尾聲363
第21章 飾面365
21.1 輕量級RAII366
21.2 將數(shù)據(jù)和操作綁定在~起367
21.2.1 pod_veneer‘368
21.2.2 創(chuàng)建日志消息370
21.2.3 減少浪費一371
21.2.4 類型安全的消息類372
21.3 “擦亮”飾面概念374
21.4 飾面:尾聲一376
第22章 螺栓377
22.1 添加功能一377
22.2 皮膚選擇一378
22.3 非虛重寫“379
22.4 巧用作用域一380
22.5 擬編譯期多態(tài):逆反式螺栓一383
22.6 參數(shù)化多態(tài)包裝384
22.7 螺栓:尾聲一386
第23章 模板構(gòu)造函數(shù)387
23.1 不易察覺的開銷389
23.2 懸掛引用一389
23.3 模板構(gòu)造函數(shù)特化391
23.4 實參代理”392
23.5 明確實參的范疇394
23.6 模板構(gòu)造函數(shù):尾聲395
第五部分 操作符一396
第24章 operatorbool()398
24.1 operatorint()const398
24.2 operatorvoid*()const一399
24.3 operatorbool()const*400
24.4 operator!()const401
24.5 operatorbooleanconst()cOnst40l
24.6 operatorintboolean()cOnst402
24.7 在現(xiàn)實世界中操作402
24.8 operator!407
第25章快速、非侵入性的字符串拼接408
25.1 fast_string_concatenator<>409
25.1.1 與用戶自定義的字符串類協(xié)同工作409
25.1.2 將“拼接子”串起來.-.410
25.1.3 fast_string_concatenator類41t
25.1.4 內(nèi)部實現(xiàn)413
25.2 性能417
25.3 與其他字符串類協(xié)作420
25.3.1 整合進標準庫中420
25.3.2 整合進可改動的現(xiàn)存類中420
25.3.3 與不可更改的類互操作420
25.4 拼接提示421
25.5 病態(tài)括號422
25.6 標準化423
第26章 你的地址是什么424
26.1 無法得到真實的地址424
26.1.1 STL式元素存放424
26.1.2 ATL外覆類和CAdapt.-425
26.1.3 獲取真實的地址426
26.2 在轉(zhuǎn)換過程中發(fā)生了什么427
26.3 我們返回什么429
26.4 你的地址是什么:尾聲431
第27章 下標索引操作符--434
27.1 指針轉(zhuǎn)換與下標索引操作符---434
27.1.1 選擇隱式轉(zhuǎn)換操作符436
27.1.2 選擇下標索弓J操作符437
27.2 錯誤處理一437
27.3 返回值.439
第28章 增量操作符441
28.1 缺少后置式操作符442
28.2 效率443
第29章 算術(shù)類型446
29.1 類定義446
29.2 缺省構(gòu)造.447
29.3 初始化(值構(gòu)造)447
29.4 拷貝構(gòu)造函數(shù)450
29.5 賦值一450
29.6 算術(shù)操作符.451
29.7 比較操作符452
29.8 訪問值-.452
29.9 sinteger64 453
29.10 截斷、提升以及布爾測試453
29.10.1 截斷453
29.10.2 提升-.455
29.10.3 布爾測試455
29.11 算術(shù)類型:尾聲456
第30章 短路458
第六部分 擴展C++460
第31章 返回值生命期461
31.1 返回值生命期問題分類461
31.1.1 局部變量462
31.1.2 局部靜態(tài)對象462
31.1.3 析構(gòu)后指針(PostdeslructionPointers)462
31.2 為何按引用返回462
31.3 解決方案l:integer_to_string<>‘462
31.4 解決方案2TSS465
31.4.1 declspec(thread)466
31.4.2 Win32TLS-466
31.4.3 平臺無關(guān)的API469
31.4.4 RVL470
31.5 解決方案3--擴展RVL470
31.5.1 解決線程內(nèi)的RVL.Ls問題471
31.5.2 RVL472
31.6 解決方案4--靜態(tài)數(shù)組大小決議.-472
31.7 解決方案5--轉(zhuǎn)換墊片474
31.8 性能476
31.9 RVL:垃圾收集的大勝利477
31.10 可能的應用478
31.1l 返回值生命期:尾聲478
第32章 內(nèi)存一479
32.1 內(nèi)存分類479
32.1.1 棧和靜態(tài)內(nèi)存479
32.1.2 棧擴張480
32.1.3 堆內(nèi)存481
32.2 兩者之間的折衷481
32.2.1 alloca()一482
32.2.2 VLA 483
32.2.3 auto-buffer<>483
32.2.4 使用autobuffer486
32.2.5 EBO,在哪里487
32.2.6 性能488
32.2.7 堆、棧以及其他490
32.2.8 pod_vector<>--.491
32.3 配置器一493
32.3.1 函數(shù)指針493
32.3.2 配置器接口494
32.3.3 每庫初始化(Per-libraryInitialization)495
32.3.4 每調(diào)用指定(Per-CallSpecification)496
32.4 內(nèi)存:尾聲一496
第33章 多維數(shù)組497
33.1 激活下標索引操作符498
33.2 運行時確定大小499
33.2.1 可變長數(shù)組499
33.2.2 vector<...vector<T>500
33.2.3 boost::multi_array501
33.2.4 fixed_array_1/2/3/4d 501
33.3 編譯期確定大小505
33.3.I boost::array‘‘506
33.3.2 static_array1/2/3/4d’506
33.4 塊訪問一508
33.4.1 使用std::filln()509
33.4.2 array墊片_size510
33.5 性能一512
33.5.1 運行期確定大小513
33.5.2 編譯期確定大小514
33.6 多維數(shù)組:尾聲515
第34章 仿函數(shù)和區(qū)間516
34.1 語法混亂516
34.2 for_all()517
34.2.1 數(shù)組518
34.2.2 命名518
34.3 局部仿函數(shù)520
34.3.1 手寫循環(huán)520
34.3.2 自定義仿函數(shù)521
34.3.3 內(nèi)嵌的仿函數(shù)521
34.3.4 溫和一些523
34.3.5 泛化的仿函數(shù):類型隧道(TypeTunneling)524
34.3.6 再進一步,走得太遠了526
34.3.7 局部仿函數(shù)和回調(diào)API-527
34.4 區(qū)間 529
34.4.1 區(qū)間概念529
34.4.2 概念性區(qū)間531
34.4.3 可迭代區(qū)間533
34.4.4 區(qū)間算法和標簽533
34.4.5 過濾器535
34.4.6 虛偽536
34.5 仿函數(shù)和區(qū)間:尾聲536
第35章 屬性537
35.1 編譯器擴展539
35.2 可供選擇的實現(xiàn)方案539
35.2.1 將屬性的實現(xiàn)分門別類540
35.2.2 EMO 540
35.3 字段屬性541
35.3.1 field__property_get541
35.3.2 field__property_set 545
35.3.3 內(nèi)置武字段屬性:尾聲 546
35.3.4 field_property_gelLexternal546
35.3.5 field__propertyset--external--547
35.3.6 Hack掉.547
35.4 方法屬性一548
35.4.1 method_property_get 548
35.4.2 method_property_set 555
35.4.3 method__property_getset 555
35.4.4 謹防無限循環(huán)557
35.4.5 method_property_get-external 558
35.4.6 method_property_set-external561
35.4.7 method_property_getset-external562
35.5 靜態(tài)屬性一564
35.5.1 靜態(tài)字段屬性564
35.5.2 內(nèi)置式靜態(tài)方法屬性564
35.5.3 外置式靜態(tài)方法屬性566
35.6 虛屬性一567
35.7 屬性的使用568
35.7.1 泛化性568
35.7.2 錯誤診斷中的類型替換.569
35.8 屬性:尾聲570
附錄A 編譯器和庫572
A.1 編譯器572
A.2 庫573
A.2.1 BOOst574
A.2.2 STLSoft574
A.2.3 其他庫574
A.3 其他資源575
A.3.1 期刊575
A.3.2 其他語言575
A.3.3 新闖組576
附錄B “謙虛點,別驕傲”-577
B.1 操作符重載577
B.2 后悔DRY579
B.3 偏執(zhí)式編程579
B.4 精神錯亂580
附錄C Arturius.-582
附錄 D隨書光盤583
尾聲584
參考書目585

本目錄推薦

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