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
型別、 nullptr
auto
關鍵字<=>
、安全比較運算符4. 基本概念 II - 整數與浮點型
size_t
、 ptrdiff_t
、 uintptr_t
、算術運算語意、提升、截斷、未定義行為、飽和算術NaN
)、機器Epsilon、最後一位單位(ULP)、備忘單、限制和有用函數、算術屬性、特殊值行為、未定義行為、偵測浮點錯誤5. 基本概念 III - 實體與控制流
struct
、位域、 union
if
語句、 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 consteval
volatile
關鍵字static_cast
、 const_cast
、 reinterpret_cast
、型別雙關、 std::bit_cast
、統一初始化轉換、 gls::narrow_cast
sizeof
運算子:概述, [[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
、 delete
9. 物件導向程式設計二-多態性與運算子重載
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
、巢狀requires
12. 翻譯單元 I - 連結和單一定義規則
static
關鍵字、匿名命名空間、 extern
關鍵字const
和constexpr
的連結:靜態初始化順序慘敗inline
函數/變數、 constexpr
和inline
extern
關鍵字extern
關鍵字13. 翻譯單元 II - 包含、模組和命名空間
#include
問題:包括防護、前向聲明、循環依賴、常見連結錯誤14. 代碼約定一
#include
: #include
保護、 #include
語法、 #include
順序、常見頭檔/原始檔名約定static
全域變數、轉換struct
與class
、初始化、花括號初始化列表、特殊成員函數、 =default
、 =delete
、其他問題、繼承、樣式15. 代碼約定 II
auto
if/else
,比較, switch
, for/while
using namespace
指令、匿名/未命名命名空間、命名空間與類別設計、樣式16. 調試和測試
std::breakpoint
valgrind
clang-tidy
17. 生態系 - Cmake 和其他工具
cmake
和ctest
doxygen
clang-format
、 Compiler Explorer
、程式碼轉換 - CppInsights
、人工智慧驅動的程式碼補全 - 本地程式碼搜尋 - ugrep
、 ripgrep
、 hypergrep
、程式碼搜尋引擎 - searchcode/grep.app
、程式碼基準測試 - Quick-Bench
, 編碼字體18. 公用事業
ofstream/ifstream
std::string
、數值轉換、 std::string_view
、 std::format
、 std::print
std::span
<random>
、種子、PRNG 週期和品質、分佈、最新演算法和效能、準隨機std::pair
、 std::tuple
、 std::variant
、 std::optional
、 std::any
、 std::stacktrace
19.容器、迭代器和演算法
std::array
、 std::vector
、 std::deque
、 std::list
、 std::forward_list
std::set
、 std::map
、 std::multiset
std::stack
、 std::queue
、 std::priority_queue
std::advance
、 std::next
、 std::prev
、 std::distance
、容器存取方法、迭代器特徵std::find_if
、 std::sort
、 std::accumulate
、 std::generate
、 std::remove_if
20. 高級主題 I
lvalues
和rvalues
引用、移動語意、 std::move
、類別聲明語意&
, &&
引用限定符與易volatile
重載auto
推導、 auto(x)
:衰減複製const
正確性21. 高級主題 II
noexcept
關鍵字、記憶體分配問題、回傳程式碼與例外摘要、 std::expected
、替代錯誤處理方法std::unique_ptr
、 std::shared_ptr
、 std::weak_ptr
22.優化一——基本概念
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/