W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
[美] 斯科特·邁耶(Scott Meyers) 著,高博 譯
想要徹底理解C++11和C++14,不可止步于熟悉它們引入的語言特性(例如,auto型別推導(dǎo)、移動語義、lambda表達式,以及并發(fā)支持)。挑戰(zhàn)在于高效地運用這些特性,從而使你的軟件具備正確性、高效率、可維護性和可移植性。這正是本書意欲達成的定位。它描述的正是使用C++11和C++14(即現(xiàn)代C++)來編寫真正卓越的軟件之道。
本書沿用了Scott Meyers早期作品中業(yè)已證明的基于指導(dǎo)原則和實例驅(qū)動的格式,但介紹的是全新材料。本書是所有C++軟件開發(fā)工程師的必讀之選。
涵蓋以下主題:
大括號初始化、noexcept規(guī)格、完美轉(zhuǎn)發(fā),以及智能指針的make函數(shù)的優(yōu)缺點。
std::move、std::forward、右值引用和萬能引用之間的聯(lián)系。
編寫整潔、正確,以及高效的lambda表達式的方法。
std::atomic和volatile有怎樣的區(qū)別,它們分別用于什么場合,以及它們和C++的并發(fā)API有何聯(lián)系。
“舊”C++程序設(shè)計(即C++98)中的實戰(zhàn)要求在現(xiàn)代C++的軟件開發(fā)中作出哪些修訂。
20多年來,Scott Meyers的Effective C++叢書(包括《Effective C++》、《More Effecitve C++》和《Effective STL》)已經(jīng)為C++程序設(shè)計指南的業(yè)界設(shè)立標(biāo)桿。他清晰明了引人入勝的、對復(fù)雜技術(shù)材料進行條分縷析的闡釋為他贏得了世界范圍內(nèi)的稱譽,也使他成為一名廣受歡迎的培訓(xùn)師、咨詢顧問和會議講師。他擁有布朗大學(xué)計算機科學(xué)專業(yè)的博士學(xué)位。
“學(xué)會了C++基礎(chǔ)知識以后,是Scott Meyers的Effective C++叢書教會了我如何在產(chǎn)品代碼中運用C++。本書是具有重要性的一本學(xué)習(xí)手冊,它給你關(guān)于核心指導(dǎo)原則、程序設(shè)計風(fēng)格和習(xí)慣用法方面的建議,使你能夠高效地、適當(dāng)?shù)厥褂矛F(xiàn)代C++。手頭還沒有一本這樣的書嗎?就買這本,就趁現(xiàn)在!”
——Herb Sutter
C++標(biāo)準(zhǔn)委員會主席,微軟公司C++軟件架構(gòu)師
對 C 還有愛嗎?理應(yīng)如此!現(xiàn)代 C (即 C 11/C 14)遠不止是修修補補???慮所有的新功能,這簡直是一門語言的脫胎換骨。你在尋求指導(dǎo)和幫助嗎?那么本書 肯定就是你想找的。關(guān)于 C ,Scott Meyers 一直是精確、質(zhì)量和驚喜的代名詞。
——Gerhard Kreuzer,西門子股份公司研發(fā)工程師
精深的專業(yè)人士很難尋覓。完美主義的傳道授業(yè)——講求策略和言簡意賅的作者也是 一人難求。當(dāng)你發(fā)現(xiàn)兩者體現(xiàn)在同一個人身上時,你知道你找到的會是一種享受?!禘ffective Modern C 》是一位完美的技術(shù)作家高山仰止的成就。它在錯綜復(fù)雜、 相互聯(lián)系的話題之間游走,條分縷析地、意義明確地、井井有條地進行了闡明,而所 有這些都在洗練的文筆中娓娓道來。你不太可能在《Effective Modern C 》中找到技術(shù)錯誤,枯燥段落,甚至偷懶的詞句。
——Andrei Alexandrescu 博士,F(xiàn)acebook 研究科學(xué)家,《Modern C Design》作者
作為擁有超過 20 年 C 經(jīng)驗的人,為了充分利用現(xiàn)代 C (既要習(xí)得*實踐,又 要避免各種陷阱),我強烈建議你閱讀本書、徹底閱讀本書,并經(jīng)常參考它!當(dāng)然,我從本書中學(xué)到了很多新知識!
——Nevin Liber DRW,交易集團公司高級軟件工程師
C 的締造者 Bjarne Stroustrup 如是說:“C 11 感覺像是一種新的語言?!?/p>
《Effective Modern C 》使得我們能夠清楚地向日常使用 C 的軟件工程師解釋, 如何從 C 11/C 14 的新特性和習(xí)慣用法中受益,并和他們產(chǎn)生共鳴。
Scott Meyers 出品,必屬精品!
——Cassio Neri FX 定量分析師,勞埃德銀行集團
Scott 掌握了從復(fù)雜性中抽出容易理解的內(nèi)核這個竅門。他的 Effective C 叢書有助 于改善上一代 C 程序員的程序設(shè)計風(fēng)格,而這本新書似乎定位于為使用現(xiàn)代 C 的人做同樣的事情。
—— Roger Orr OR/2 有限公司,ISO C 標(biāo)準(zhǔn)委員會成員
《Effective Modern C 》是提高你的現(xiàn)代 C 技能的上佳工具。它不僅教會你如何 使用、何時何地使用現(xiàn)代 C ,而且還是有效地使用。它還解釋了背后的原因何在。 毫無疑問,Scott 清晰而有見地的文字分布在 42 個經(jīng)過精心思考的條款上,使得程序員能夠更好地理解這門語言。
—— Bart Vandewoestyne,研發(fā)工程師,C 愛好者
我喜歡 C ,幾十年來它一直是我在工作中使用的工具。而且,它的*特性比我以 前想像的更強大、更富有表現(xiàn)力。但是,所有這些選擇都帶來了一個問題: “何時以及如何應(yīng)用這些特性呢?”如以往一樣,Scott 的Effective C 叢書是這個問題的明確答案。
—— Damien Watkins CSIRO,計算軟件工程組組長
這是一本關(guān)于過渡到現(xiàn)代 C 的上佳讀物,新的 C 11/14 語言特性被和 C 98 參照著描述,主題條款很容易參讀,并且在每個部分末尾都給出了總結(jié)性建議。 無論對于入門還是高級的 C 開發(fā)工程師,本書都既有娛樂性又有實用性。
—— Rachel Cheng,F(xiàn)5 網(wǎng)絡(luò)
如果你正在從 C 98/03 遷移至 C 11/14,則肯定需要 Scott 在《Effective Modern C 》中提供的極其實用而清晰的信息。如果你已經(jīng)在撰寫 C 11 代碼, 那么可能會通過 Scott 針對該語言的主要新功能的深入討論來發(fā)現(xiàn)新功能的問題 所在。無論你的情況屬于哪一種,本書*值得你為閱讀而付出的時間。
—— Rob Stewart Boost Steering,委員會成員(boost.org)
目錄
出版商聲明 1
致謝 3
緒論 7
第1章 型別推導(dǎo) 15
條款1:理解模板型別推導(dǎo) 15
條款2:理解auto型別推導(dǎo) 23
條款3:理解decltype 28
條款4:掌握查看型別推導(dǎo)結(jié)果的方法 35
第2章 auto 41
條款5:優(yōu)先選用auto,而非顯式型別聲明 41
條款6:當(dāng)auto推導(dǎo)的型別不符合要求時,使用帶顯式型別的初始化物習(xí)慣用法 46
第3章 轉(zhuǎn)向現(xiàn)代C++ 52
條款7:在創(chuàng)建對象時注意區(qū)分()和{} 52
條款8:優(yōu)先選用nullptr,而非0或NULL 61
條款9:優(yōu)先選用別名聲明,而非typedef 64
條款10:優(yōu)先選用限定作用域的枚舉型別,而非不限作用域的枚舉型別 68
條款11:優(yōu)先選用刪除函數(shù),而非private未定義函數(shù) 74
條款12:為意在改寫的函數(shù)添加override聲明 79
條款13:優(yōu)先選用const_iterator,而非iterator 85
條款14:只要函數(shù)不會發(fā)射異常,就為其加上noexcept聲明 89
條款15:只要有可能使用constexpr,就使用它 95
條款16:保證const成員函數(shù)的線程安全性 101
條款17:理解特種成員函數(shù)的生成機制 106
第4章 智能指針 113
條款18:使用std::unique_ptr管理具備專屬所有權(quán)的資源 115
條款19:使用std::shared_ptr管理具備共享所有權(quán)的資源 120
條款20:對于類似std::shared_ptr但有可能空懸的指針使用std::weak_ptr 129
條款21:優(yōu)先選用std::make_unique和std::make_shared,而非直接使用new 133
條款22:使用Pimpl習(xí)慣用法時,將特殊成員函數(shù)的定義放到實現(xiàn)文件中 141
第5章 右值引用、移動語義和完美轉(zhuǎn)發(fā) 150
條款23:理解std::move和std::forward 151
條款24:區(qū)分萬能引用和右值引用 156
條款25:針對右值引用實施std::move,針對萬能引用實施std::forward 161
條款26:避免依萬能引用型別進行重載 169
條款27:熟悉依萬能引用型別進行重載的替代方案 175
條款28:理解引用折疊 187
條款29:假定移動操作不存在、成本高、未使用 193
條款30:熟悉完美轉(zhuǎn)發(fā)的失敗情形 196
第6章 lambda表達式 204
條款31:避免默認捕獲模式 205
條款32:使用初始化捕獲將對象移入閉包 212
條款33:對auto&&型別的形參使用decltype,以std::forward之 217
條款34:優(yōu)先選用lambda式,而非std::bind 220
第7章 并發(fā)API 228
條款35:優(yōu)先選用基于任務(wù)而非基于線程的程序設(shè)計 228
條款36:如果異步是必要的,則指定std::launch::async 232
條款37:使std::thread型別對象在所有路徑皆不可聯(lián)結(jié) 236
條款38:對變化多端的線程句柄析構(gòu)函數(shù)行為保持關(guān)注 243
條款39:考慮針對一次性事件通信使用以void為模板型別實參的期值 247
條款40:對并發(fā)使用std::atomic,對特種內(nèi)存使用volatile 254
第8章 微調(diào) 263
條款41:針對可復(fù)制的形參,在移動成本低并且一定會被復(fù)制的前提下,考慮將
其按值傳遞 263
條款42:考慮置入而非插入 273
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: