【Effective Modern C++】索引

weixin_34249678發表於2018-12-29
  • 本書講述了C++11/14新特性的用法和原理。

1. 型別推斷

  • 01 理解模板型別推斷
  • 02 理解auto型別推斷
  • 03 理解decltype
  • 04 檢視推斷型別的方法

2. auto

  • 05 使用auto替代顯式型別宣告
  • 06 auto推斷出非預期型別時,使用explicitly typed initializer手法

3. 轉向現代C++

  • 07 建立物件時注意區分()和{}
  • 08 使用nullptr替代0和NULL
  • 09 使用別名宣告替代typedef
  • 10 使用限定作用域enum替代非限定作用域enum
  • 11 使用=delete替代private未定義函式
  • 12 將要重寫的函式宣告為override
  • 13 使用const_iterator替代iterator
  • 14 將不拋異常的函式宣告為noexcept
  • 15 儘可能使用constexpr
  • 16 保證const成員函式執行緒安全
  • 17 理解特殊成員函式的生成機制

4. 智慧指標

  • 18 對專屬所有權的資源管理使用std::unique_ptr
  • 19 對共享所有權的資源管理使用std::shared_ptr
  • 20 使用std::weak_ptr替代可能空懸的std::shared_ptr
  • 21 使用std::make_unique和std::make_shared替代new
  • 22 使用pimpl手法時,將特殊成員函式定義在實現檔案中

5. 右值引用、移動語義和完美轉發

  • 23 理解std::move和std::forward
  • 24 區分轉發引用和右值引用
  • 25 對右值引用使用std::move,對轉發引用使用std::forward
  • 26 避免過載轉發引用
  • 27 過載轉發引用的替代方案
  • 28 理解引用摺疊
  • 29 移動操作缺乏優勢的情形:不存在、高成本、不可用
  • 30 完美轉發的失敗情形

6. lambda表示式

  • 31 避免預設捕獲模式
  • 32 使用初始化捕獲將物件移入閉包
  • 33 對auto&&型別形參使用decltype來std::forward
  • 34 使用lambda替代std::bind

7. 併發API

  • 35 使用std::async替代std::thread
  • 36 需要非同步則指定std::launch::async
  • 37 讓std::thread物件在所有路徑上不可合併(unjoinable)
  • 38 注意多變的執行緒控制程式碼解構函式行為
  • 39 對一次性事件通訊使用void future
  • 40 對併發使用std::atomic,對特殊記憶體使用volatile

8. 其他輕微調整

  • 41 對於可拷貝的形參,如果移動成本低且一定會被拷貝則考慮傳值
  • 42 使用emplace操作替代insert操作

相關文章