推薦序
譯者序
對本書的稱許
齣版商聲明
緻謝
緒論
術語和慣例
提交缺陷報告和改進建議
型彆推導
條款1:理解模闆型彆推導
條款2:理解auto型彆推導
條款3:理解decltype
條款4:掌握查看型彆推導結果的方法
auto
條款5:優先選用auto,而非顯式型彆聲明
條款6:當auto推導的型彆不符閤要求時,使用帶顯式型彆的初始化物習慣用法
轉嚮現代C++
條款7:在創建對象時注意區分()和{}
條款8:優先選用nullptr,而非0或NULL
條款9:優先選用彆名聲明,而非typedef
條款10:優先選用限定作用域的枚舉型彆,而非不限作用域的枚舉型彆
條款11:優先選用刪除函數,而非private未定義函數
條款12:為意在改寫的函數添加override聲明
條款13:優先選用const_iterator,而非iterator
條款14:隻要函數不會發射異常,就為其加上noexcept聲明
條款15:隻要有可能使用constexpr,就使用它
條款16:保證const成員函數的綫程安全性
條款17:理解特種成員函數的生成機製
智能指針
條款18:使用std::unique_ptr管理具備專屬所有權的資源
條款19:使用std::shared_ptr管理具備共享所有權的資源
條款20:對於類似於std::shared_ptr、但有可能空懸的指針使用std::weak_ptr
條款21:優先選用std::make_unique和std::make_shared,而非直接使用new
條款22:使用Pimpl習慣用法時,將特殊成員函數的定義放到實現文件中
右值引用、移動語義和完美轉發
條款23:理解std::move和std::forward
條款24:區分萬能引用和右值引用
條款25:針對右值引用實施std::move,針對萬能引用實施std::forward
條款26:避免依萬能引用型彆進行重載
條款27:熟悉依萬能引用型彆進行重載的替代方案
條款28:理解引用摺疊
條款29:假定移動操作不存在、成本高、未使用
條款30:熟悉完美轉發的失敗情形
lambda錶達式
條款31:避免默認捕獲模式
條款32:使用初始化捕獲將對象移入閉包
條款33:對auto&&型彆的形參使用decltype,以std::forward之
條款34:優先選用lambda式,而非std::bind
並發API
條款35:優先選用基於任務而非基於綫程的程序設計
條款36:如果異步是必要的,則指定std::launch::async
條款37:使std::thread型彆對象在所有路徑皆不可聯結
條款38:對變化多端的綫程句柄析構函數行為保持關注
條款39:考慮針對一次性事件通信使用以void為模闆型彆實參的期值
條款40:對並發使用std::atomic,對特種內存使用volatile
微調
條款41:針對可復製的形參,在移動成本低並且一定會被復製的前提下,考慮將其按值傳遞
條款42:考慮置入而非插入
作者簡介
題記
· · · · · · (
收起)
想要徹底理解C++11和C++14,不可止步於熟悉它們引入的語言特性(例如,auto型彆推導、移動語義、lambda錶達式以及並發支持)。挑戰在於高效地運用這些特性——從而使你的軟件具備正確性、高效率、可維護性和可移植性。這正是這本實用的圖書意欲達成的定位。它描述的正是使用C++11和C++14——現代C++來撰寫真正卓越的軟件之道。
涵蓋以下主題:
大括號初始化、noexcept規格、完美轉發,以及智能指針的make函數的優缺點
std::move、std::forward、右值引用和萬能引用之間的聯係
撰寫整潔、正確以及高效的lambda錶達式的方法
std::atomic和volatile有怎樣的區彆,它們分彆用於什麼場閤,以及它們和C++的並發API有何聯係
“舊”C++程序設計(即C++98)中的最佳實踐要求在現代C++的軟件開發中作齣哪些修訂
《Effective Modern C++》沿用瞭Scott Meyers早期作品中業已證明的基於指導原則和實例驅動的格式,但介紹的是全新材料。本書是所有C++軟件開發工程師的必讀之選。