C++之美:代碼整潔、安全又跑得快的30個(gè)要訣(英文版)
定 價(jià):109 元
- 作者:(美)J.蓋伊·戴維森,凱特·格雷戈里
- 出版時(shí)間:2024/5/1
- ISBN:9787121446009
- 出 版 社:電子工業(yè)出版社
- 中圖法分類(lèi):TP312.8C++
- 頁(yè)碼:
- 紙張:
- 版次:
- 開(kāi)本:
本書(shū)從《C++核心準(zhǔn)則》(C++ Core Guideline)數(shù)百個(gè)條目中精心挑選了30條準(zhǔn)則進(jìn)行細(xì)致、深入的講解。內(nèi)容涵蓋C++語(yǔ)言最主要的方面,如類(lèi)型系統(tǒng)、面向?qū)ο、模板和元編程、錯(cuò)誤處理、程序性能、常量性等,其間又恰如其分地穿插了編碼風(fēng)格、設(shè)計(jì)模式等主題。探討的過(guò)程中處處可見(jiàn)來(lái)自作者數(shù)十年職業(yè)生涯的經(jīng)驗(yàn)和示例,除了深入的洞察,行文中充滿(mǎn)了趣味性。作者試圖通過(guò)這種突出重點(diǎn)、以點(diǎn)帶面的方式幫助讀者了解并學(xué)習(xí)C++核心準(zhǔn)則,進(jìn)而更深入地掌握C++這門(mén)編程語(yǔ)言,特別是它的“現(xiàn)代”形態(tài)。
J.蓋伊·戴維森于 1980 年通過(guò) Acorn Atom 首次接觸到計(jì)算機(jī)。他青少年時(shí)代的大部分時(shí)間都是在各種家用電腦上編寫(xiě)游戲,這些電腦包括 Sinclair Research ZX81 和 ZX Spectrum,以及 Atari ST。后來(lái)他從蘇塞克斯大學(xué)獲得了數(shù)學(xué)學(xué)位,他還涉足過(guò)戲劇,在一支靈魂樂(lè)隊(duì)中彈奏過(guò)鍵盤(pán),之后在 20 世紀(jì) 90 年代初,他決定編寫(xiě)演示程序,并于 1997 年開(kāi)始在 Codemasters 的倫敦辦公室工作,從此進(jìn)入游戲行業(yè)。1999 年,他加入了 Creative Assembly,現(xiàn)在是那里的工程實(shí)踐主管。他從事《全面戰(zhàn)爭(zhēng)》系列游戲的工作,管理著早期的游戲目錄,也負(fù)責(zé)在工程團(tuán)隊(duì)中提升編程水準(zhǔn)。他在IGGI 咨詢(xún)委員會(huì)、BSI C++小組和 ISO C++委員會(huì)中任職。他是 ACCU 委員會(huì)的標(biāo)準(zhǔn)官員,并在 ACCU 會(huì)議的編程委員會(huì)任職。他是#include Discord 服務(wù)器的管理員。他擔(dān)任多個(gè)組織的行為準(zhǔn)則負(fù)責(zé)人。他會(huì)在 C++會(huì)議和各種聚會(huì)上發(fā)言,特別是活躍于將線(xiàn)性代數(shù)添加到標(biāo)準(zhǔn)庫(kù)的相關(guān)議題中。凱特·格雷戈里從接觸編程、結(jié)識(shí)幾位最親密的朋友到認(rèn)識(shí)她的丈夫,都是 1977 年在滑鐵盧大學(xué)完成的,所有這些她從未想過(guò)回頭。她的專(zhuān)業(yè)是化學(xué)工程,這正說(shuō)明你很難從一個(gè)人的專(zhuān)業(yè)中看出什么。她在安大略省農(nóng)村的地下室有一個(gè)小房間,里面放著一些古老的計(jì)算機(jī):PET、C64、手工焊接的 6502 系統(tǒng)等,她把這些作為一個(gè)更單純時(shí)代的紀(jì)念品。1986 年以來(lái)她與丈夫一起經(jīng)營(yíng) Gregory 咨詢(xún)公司,幫助世界各地的客戶(hù)更好地完成工作。Kate 曾在五大洲都做過(guò)主題演講,偏愛(ài)發(fā)掘一些改變認(rèn)知的真相,然后與人分享,此外還投入大量的時(shí)間在各種 C++活動(dòng)中做志愿者。其中#include 是她的最?lèi)?ài),此社區(qū)正在改變這個(gè)行業(yè),使其更受歡迎也更具包容性。他們的 Discord 服務(wù)器是一處溫馨的場(chǎng)所,在這里你可以作為初學(xué)者學(xué)習(xí) C++,也可以參與 WG21 的文章創(chuàng)作工作以改變我們使用的語(yǔ)言,或者做任何介于兩者之間的事情。
J.蓋伊·戴維森于 1980 年通過(guò) Acorn Atom 首次接觸到計(jì)算機(jī)。他青少年時(shí)代的大部分時(shí)間都是在各種家用電腦上編寫(xiě)游戲,這些電腦包括 Sinclair Research ZX81 和 ZX Spectrum,以及 Atari ST。后來(lái)他從蘇塞克斯大學(xué)獲得了數(shù)學(xué)學(xué)位,他還涉足過(guò)戲劇,在一支靈魂樂(lè)隊(duì)中彈奏過(guò)鍵盤(pán),之后在 20 世紀(jì) 90 年代初,他決定編寫(xiě)演示程序,并于 1997 年開(kāi)始在 Codemasters 的倫敦辦公室工作,從此進(jìn)入游戲行業(yè)。1999 年,他加入了 Creative Assembly,現(xiàn)在是那里的工程實(shí)踐主管。他從事《全面戰(zhàn)爭(zhēng)》系列游戲的工作,管理著早期的游戲目錄,也負(fù)責(zé)在工程團(tuán)隊(duì)中提升編程水準(zhǔn)。他在IGGI 咨詢(xún)委員會(huì)、BSI C++小組和 ISO C++委員會(huì)中任職。他是 ACCU 委員會(huì)的標(biāo)準(zhǔn)官員,并在 ACCU 會(huì)議的編程委員會(huì)任職。他是#include Discord 服務(wù)器的管理員。他擔(dān)任多個(gè)組織的行為準(zhǔn)則負(fù)責(zé)人。他會(huì)在 C++會(huì)議和各種聚會(huì)上發(fā)言,特別是活躍于將線(xiàn)性代數(shù)添加到標(biāo)準(zhǔn)庫(kù)的相關(guān)議題中。凱特·格雷戈里從接觸編程、結(jié)識(shí)幾位最親密的朋友到認(rèn)識(shí)她的丈夫,都是 1977 年在滑鐵盧大學(xué)完成的,所有這些她從未想過(guò)回頭。她的專(zhuān)業(yè)是化學(xué)工程,這正說(shuō)明你很難從一個(gè)人的專(zhuān)業(yè)中看出什么。她在安大略省農(nóng)村的地下室有一個(gè)小房間,里面放著一些古老的計(jì)算機(jī):PET、C64、手工焊接的 6502 系統(tǒng)等,她把這些作為一個(gè)更單純時(shí)代的紀(jì)念品。1986 年以來(lái)她與丈夫一起經(jīng)營(yíng) Gregory 咨詢(xún)公司,幫助世界各地的客戶(hù)更好地完成工作。Kate 曾在五大洲都做過(guò)主題演講,偏愛(ài)發(fā)掘一些改變認(rèn)知的真相,然后與人分享,此外還投入大量的時(shí)間在各種 C++活動(dòng)中做志愿者。其中#include 是她的最?lèi)?ài),此社區(qū)正在改變這個(gè)行業(yè),使其更受歡迎也更具包容性。他們的 Discord 服務(wù)器是一處溫馨的場(chǎng)所,在這里你可以作為初學(xué)者學(xué)習(xí) C++,也可以參與 WG21 的文章創(chuàng)作工作以改變我們使用的語(yǔ)言,或者做任何介于兩者之間的事情。
第1章 避重就輕不可取21
1.1 P.2:使用ISO C++標(biāo)準(zhǔn)編寫(xiě)代碼23
1.2 F.51:有選擇時(shí)優(yōu)先使用默認(rèn)參數(shù)而非重載33
1.3 C.45:不要定義僅初始化數(shù)據(jù)成員的默認(rèn)構(gòu)造函數(shù),
?而應(yīng)使用類(lèi)成員初始化43
1.4 C.131:避免平凡的get和set函數(shù)51
1.5 ES.10:每條語(yǔ)句只聲明一個(gè)名字61
1.6 NR.2:不強(qiáng)求函數(shù)只用一條return語(yǔ)句69
第2章 不要傷害自己79
2.1 P.11:將凌亂的結(jié)構(gòu)封裝起來(lái),而不是使其散布于代碼中81
2.2 I.23:盡量減少函數(shù)參數(shù)91
2.3 I.26:使用C風(fēng)格子集獲取跨編譯器的ABI99
2.4 C.47:按成員聲明順序定義并初始化成員變量107
2.5 CP.3:盡量減少可寫(xiě)數(shù)據(jù)的顯式共享117
2.6 T.120:只在真正需要時(shí)使用模板元編程127
第3章 別再使用139
3.1 I.11:切勿通過(guò)原生指針(T*)或引用(T&)轉(zhuǎn)移所有權(quán)141
3.2 I.3:避免使用單例149
3.3 C.90:依靠構(gòu)造函數(shù)和賦值運(yùn)算符,而不是memset和memcpy159
3.4 ES.50:不要用強(qiáng)制轉(zhuǎn)換去除const限定符169
3.5 E.28:避免基于全局狀態(tài)(如errno)的錯(cuò)誤處理179
3.6 SF.7:不要在頭文件的全局作用域?qū)憉sing namespace189
第4章 正確使用新特性199
4.1 F.21:優(yōu)先選擇結(jié)構(gòu)體或元組返回多個(gè)“輸出”值201
4.2 Enum.3:優(yōu)先選擇類(lèi)枚舉而不是“普通”枚舉213
4.3 ES.5:保持作用域小221
4.4 Con.5:使用constexpr表示編譯時(shí)可以計(jì)算的值233
4.5 T.1:使用模板提高代碼的抽象層次245
4.6 T.10:為所有模板參數(shù)指定概念255
第5章 默認(rèn)寫(xiě)出好代碼265
5.1 P.4:理想情況下,程序應(yīng)具有靜態(tài)類(lèi)型安全性267
5.2 P.10:優(yōu)先選擇不可變數(shù)據(jù)而不是可變數(shù)據(jù)279
5.3 I.30:封裝違反規(guī)則的部分287
5.4 ES.22:確定初始值后再聲明變量295
5.5 Per.7:為促成優(yōu)化而設(shè)計(jì)305
5.6 E.6:使用RAII防止泄露313
后記325
跋327