出版者的忠告
============
使用代碼示例
------------
這本書可以讓你的工作得心應手。一般來說,如果在本書中提供了示例代碼,你可以在你的程序和文檔中。你不必為了代碼的權限而聯系我們,除非你要重新造一個偉大的輪子。舉個例子,從書中代碼編寫一系列代碼片段不需要授權,但是販賣和分發O’Reilly的書籍代碼的CD-ROM是需要授權的。引用本書和本書的例子代碼來回答一些問題是不需要授權的,但是把很多的書中的代碼整合進入你的產品文檔里面是需要授權的。
我們會很高興,但不是強迫引用歸屬。一個常見的寫法包括標題,作者,出版社和ISBN號。舉個例子:“Effective Modern C++ by Scott Meyers
(O’Reilly). Copyright 2015 Scott Meyers, 978-1-491-90399-5.”
如果你覺得你對本書中的示例代碼的使用超出了上述的權利要求范圍,歡迎通過permissions@oreilly.com聯系我們
Safari? Books Online
--------------------
[Safari Books Online](http://safaribooksonline.com/)是一個應需求的分發世界級領先的技術和商業作家的書籍和視頻[內容](https://www.safaribooksonline.com/explore/)的電子庫。
技術專家,軟件開發者,web設計師和商務與創新型人士使用Safari Books Online作為他們的主力資源進行科研,解決問題,學習和認證訓練。
Safari Books Online為企業用戶,政府部門,教育用戶和個人提供一些列的[計劃和打折](https://www.safaribooksonline.com/pricing/)
成員可以有權利訪問上像O’Reilly Media,Prentice Hall Professional,Addison-Wesley Professional,Microsoft Press,Sams,Que,Peachpit Press,Focal Press,Cisco Press,John Wiley & Sons,Syngress,Morgan
Kaufmann,IBM Redbooks,Packt,Adobe Press,FT Press,Apress,Manning,New Riders,McGraw-Hill,Jones & Bartlett,Course Technology和成百[更多](https://www.safaribooksonline.com/our-library/)這樣的可查詢的數據庫中的千本書籍,訓練視頻和重新出版的原稿。想獲得更多關于Safari Books Online的信息,請訪問我們的[網站](http://safaribooksonline.com/)。
如何聯系我們
------------
關于本書的評論和問題可以聯系出版社:
> O’Reilly Media, Inc.
> 1005 Gravenstein Highway North
> Sebastopol, CA 95472
> 800-998-9938 (in the United States or Canada)
> 707-829-0515 (international or local)
> 707-829-0104 (fax)
想問關于本書的技術性問題,可以發送郵件到 bookquestions@oreilly.com
想獲得更多的關于本書的信息,課程,會議和新聞,參考我們的網站[http://www.oreilly.com/](http://www.oreilly.com/)
Facebook:[http://facebook.com/oreilly](http://facebook.com/oreilly)
Twitter:[http://twitter.com/oreillymedia](http://twitter.com/oreillymedia)
YouTube:[http://www.youtube.com/oreillymedia](http://www.youtube.com/oreillymedia)
- 出版者的忠告
- 致謝
- 簡介
- 第一章 類型推導
- 條款1:理解模板類型推導
- 條款2:理解auto類型推導
- 條款3:理解decltype
- 條款4:知道如何查看類型推導
- 第二章 auto關鍵字
- 條款5:優先使用auto而非顯式類型聲明
- 條款6:當auto推導出非預期類型時應當使用顯式的類型初始化
- 第三章 使用現代C++
- 條款7:創建對象時區分()和{}
- 條款8:優先使用nullptr而不是0或者NULL
- 條款9:優先使用聲明別名而不是typedef
- 條款10:優先使用作用域限制的enmu而不是無作用域的enum
- 條款11:優先使用delete關鍵字刪除函數而不是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:使用init捕捉來移動對象到閉包
- 條款33:在auto&&參數上使用decltype當std::forward auto&&參數
- 條款34:優先使用lambda而不是std::bind
- 第七章 并發API
- 條款35:優先使用task-based而不是thread-based
- 條款36:當異步是必要的時聲明std::launch::async
- 條款37:使得std::thread在所有的路徑下無法join
- 條款38:注意線程句柄析構的行為
- 條款39:考慮在一次性事件通信上void的特性
- 條款40:在并發時使用std::atomic 在特殊內存上使用volatile
- 第八章 改進
- 條款41:考慮對拷貝參數按值傳遞移動廉價,那就盡量拷貝
- 條款42:考慮使用emplace代替insert