Modern CPP Programming
v1.8.0

這個開放式課程是為那些已經熟悉 C 和物件導向程式設計並達到 C++ 程式設計熟練程度的人員。本課程涵蓋 C++ 程式設計基礎知識,並繼續介紹高階 C++ 語意和概念。
主要特點:
如果您喜歡本課程或覺得它有用,請添加星星
| # | 標題 | 主要焦點 |
|---|---|---|
| 1 | 簡介(html) | C/C++的歷史、應用領域、課程介紹 |
| 2 | 準備工作(html) | 書籍、如何編譯、Hello world |
| 3 | 基本概念一(html) | 類型系統、基本類型和運算符 |
| 4 | 基本概念 II (html) | 整數和浮點類型及其算術 |
| 5 | 基本概念 III (html) | 實體、枚舉器、結構、控制流語句 |
| 6 | 基本概念 IV (html) | 堆疊、堆疊、指標、參考、常數屬性、轉換運算符 |
| 7 | 基本概念 V (html) | 函數、Lambda 表達式、預處理指令 |
| 8 | 物件導向程式設計 I (html) | 類別層次結構、建構子、析構函式、類別關鍵字 |
| 9 | 物件導向程式設計 II (html) | 多態性、運算子重載 |
| 10 | 模板和元編程 I (html) | 函數模板、類型特徵、編譯時實用程序 |
| 11 | 模板和元編程 II (html) | 類別模板,SFINAE |
| 12 | 翻譯單元 I (html) | 連結和單一定義規則 |
| 13 | 翻譯單元 II (html) | 處理多個翻譯單元和檔案、 #include 、模組 |
| 14 | 代碼約定 I (html) | 專案組織、程式碼約定介紹、實體約定 |
| 15 | 代碼約定 II (html) | 模板、命名空間、現代 C++、可維護性、命名和格式約定 |
| 16 | 調試和測試(html) | 執行/記憶體調試、Sanitizers、Harding 技術、單元測試、測試驅動開發 |
| 17 號 | 生態系(html) | Cmake、文件和其他工具 |
| 18 | 實用程式(html) | 主要std庫 |
| 19 | 容器、迭代器和演算法(html) | 容器、迭代器、演算法、範圍 |
| 20 | 進階主題 I (html) | 移動語意、通用引用、型別推導 |
| 21 | 高級主題 II (html) | 錯誤處理、C++ 習慣用法、智慧型指針 |
| 22 | 效能優化一(html) | Ahmdal 定律、效能界限、架構概念(ILP、SIMD 等)、記憶體層次結構 |
| 23 | 性能優化 II (html) | 算術優化、內存優化等。 |
| 24 | 效能優化 III (html) | 編譯器最佳化、分析、基準測試工具 |
| 25 | 軟體設計我(html) | 基本概念、原理、用例 |
| 26 | 軟體設計二(html) | 設計模式和慣用語 |
全合一書: modern-cpp.pdf (可能有一些提交),html
一、簡介
2. 準備工作
3. 基本概念 I - 類型系統、基本類型和運算符
void型別、 nullptrauto關鍵字<=> 、安全比較運算符4. 基本概念 II - 整數與浮點型
size_t 、 ptrdiff_t 、 uintptr_t 、算術運算語意、提升、截斷、未定義行為、飽和算術NaN )、機器Epsilon、最後一位單位(ULP)、備忘單、限制和有用函數、算術屬性、特殊值行為、未定義行為、偵測浮點錯誤5. 基本概念 III - 實體與控制流
struct 、位域、 unionif語句、 for和while迴圈、Range-base for迴圈、 switch 、 goto 、避免未使用變數警告using宣告、 using namespace指令、 inline命名空間[[nodiscard]] 、 [[maybe_unused]] 、 [[deprecated]] 、 [[noreturn]]6. 基本概念 IV - 記憶體概念
& 、 struct成員存取、 void指針、指針轉換、指針算術、野指針和懸空指針new 、 delete 、非分配放置分配、非拋出分配、記憶體洩漏Const與常數表達式:常數與文字、 const 、 constexpr 、 consteval 、 constinit 、 if constexpr 、 std::is constant evaluated() 、 if constevalvolatile關鍵字static_cast 、 const_cast 、 reinterpret_cast 、型別雙關、 std::bit_cast 、統一初始化轉換、 gls::narrow_castsizeof運算子:概述, [[no_unique_address]]7. 基本概念五-函數與預處理
=delete 、預設參數constexpr/consteval 、 template 、 mutable 、 [[nodiscard]] 、捕獲列表和類# )、 #error和#warning 、 #pragma 、令牌貼上運算子## 、可變宏8. 物件導向程式設計 I - 類別概念
public/protected/private ?explicit關鍵字、 [[nodiscard]]和類= default )this 、 static 、 const 、 mutable 、 using 、 friend 、 delete9. 物件導向程式設計二-多態性與運算子重載
virtual方法、虛擬表、 override關鍵字、 final關鍵字、常見錯誤、純虛擬方法、抽象類別和接口< 、太空船運算子<=> 、下標運算子[] 、多維下標運算子[] 、函數呼叫運算子() 、靜態運算子[]和運算子() 、轉換運算子T() 、傳回型別重載解析、自增與自減運算子++ / -- 、賦值運算子= 、流運算子<< 、運算子註釋10. 模板和元編程 I - 函數模板和編譯時實用程序
auto佔位符、類別模板參數類型、陣列和指標類型、函數類型static_assert 、 using關鍵字、 decltype關鍵字11. 模板和元編程 II - 類別模板和 SFINAE
typename和template關鍵字、類別模板層次結構和using 、 friend關鍵字、模板模板參數concept關鍵字、 requires子句、 requires表達式、 requires表達式+子句、 requires子句+表達式、 requires和constexpr 、巢狀requires12. 翻譯單元 I - 連結和單一定義規則
static關鍵字、匿名命名空間、 extern關鍵字const和constexpr的連結:靜態初始化順序慘敗inline函數/變數、 constexpr和inlineextern關鍵字extern關鍵字13. 翻譯單元 II - 包含、模組和命名空間
#include問題:包括防護、前向聲明、循環依賴、常見連結錯誤14. 代碼約定一
#include : #include保護、 #include語法、 #include順序、常見頭檔/原始檔名約定static全域變數、轉換struct與class 、初始化、花括號初始化列表、特殊成員函數、 =default 、 =delete 、其他問題、繼承、樣式15. 代碼約定 II
autoif/else ,比較, switch , for/whileusing namespace指令、匿名/未命名命名空間、命名空間與類別設計、樣式16. 調試和測試
std::breakpointvalgrindclang-tidy17. 生態系 - Cmake 和其他工具
cmake和ctestdoxygenclang-format 、 Compiler Explorer 、程式碼轉換 - CppInsights 、人工智慧驅動的程式碼補全 - 本地程式碼搜尋 - ugrep 、 ripgrep 、 hypergrep 、程式碼搜尋引擎 - searchcode/grep.app 、程式碼基準測試 - Quick-Bench , 編碼字體18. 公用事業
ofstream/ifstreamstd::string 、數值轉換、 std::string_view 、 std::format 、 std::printstd::span<random> 、種子、PRNG 週期和品質、分佈、最新演算法和效能、準隨機std::pair 、 std::tuple 、 std::variant 、 std::optional 、 std::any 、 std::stacktrace19.容器、迭代器和演算法
std::array 、 std::vector 、 std::deque 、 std::list 、 std::forward_liststd::set 、 std::map 、 std::multisetstd::stack 、 std::queue 、 std::priority_queuestd::advance 、 std::next 、 std::prev 、 std::distance 、容器存取方法、迭代器特徵std::find_if 、 std::sort 、 std::accumulate 、 std::generate 、 std::remove_if20. 高級主題 I
lvalues和rvalues引用、移動語意、 std::move 、類別聲明語意& , &&引用限定符與易volatile重載auto推導、 auto(x) :衰減複製const正確性21. 高級主題 II
noexcept關鍵字、記憶體分配問題、回傳程式碼與例外摘要、 std::expected 、替代錯誤處理方法std::unique_ptr 、 std::shared_ptr 、 std::weak_ptr22.優化一——基本概念
23.優化二——程式碼優化
printf 、記憶體映射 I/O、加速原始資料加載[[likely]] / [[unlikely]] , Signed/Unsigned integers, Loops, Loop hoisting, Loop unrolling, Assertions, Compiler hints [[assume]]/std::unreacheable() ,遞迴24. 最佳化 III - 非編碼最佳化和基準測試
gprof 、 uftrace 、 callgrind 、 cachegrind 、 perf Linux 分析器25. 軟體設計 I - 基本概念(草稿)
26. 軟體設計 II - 設計模式和慣用語(草稿)
如果您發現任何拼字錯誤、概念錯誤或需要改進的部分,請使用issue面板進行報告。
Federico Busato ,https://federico-busato.github.io/