返回課程
AI013 Professional

現代 C++ 教學

本教程旨在為有經驗的開發者提供 C++11/14/17/20 新功能的快速參考。內容涵蓋語言易用性提升、執行時間改進、新容器、智慧指針與記憶體管理、正則表示式、並行程式設計,以及 C++20 的預覽。

4.8
30.0h
318 學習者
2 讚好
人工智能
開始學習

課程總覽

📚 內容摘要

本教程旨在為有經驗的開發者提供一份快速參考,介紹 C++11/14/17/20 的新功能。內容涵蓋語言易用性提升、執行時期優化、新容器的使用、智慧指標與記憶體管理、正規表示式、並行程式設計,以及 C++20 的預覽。

快速掌握 C++11/14/17/20,邁入現代 C++ 程式設計的大門。

作者: 欧长坤 (Ou Changkun)

致謝: 采用 CC BY-NC-ND 4.0 協議授權,感謝所有 GitHub 貢獻者及相關社群支持。

🎯 學習目標

  1. 使用命令列工具識別並驗證 C++ 編譯器環境與目標架構。
  2. 解釋 C(C89、C99、C11)與 C++(C++98、C++1x)之間的標準相容性與重疊歷史。
  3. 透過 extern "C" 標頭與多階段編譯工作流程,實現跨語言連結功能。
  4. 使用 nullptr 消除指標歧義,並利用 constexprif constexpr 實作編譯時期邏輯。
  5. 使用 autodecltype 及型別別名(using)簡化複雜宣告,同時以 overridefinal 確保穩固的物件導向設計。
  6. 利用可變參數模板、折疊表達式與非類型模板參數推導,設計高度通用的程式碼。
  7. 使用多種捕捉模式(值、引用、運算式、通用)定義並實作 Lambda 表達式。
  8. 使用 std::functionstd::bind 建立彈性函數包裝器與部分函數應用。
  9. 將表達式分類為左值(Lvalues)、純右值(Prvalues)與臨時量(Xvalues),並應用搬移語意(Move Semantics)優化類別資源管理。
  10. 区分 std::array(固定大小、棧上)與 std::vector(動態大小、堆上)的記憶體模型與使用情境。

🔹 第一課:C++ 歷史演進與開發環境

概要: 本課探討 C++ 開發環境的技術基礎及其與 C 語言的歷史關係。詳細說明 C++ 標準(從 C++98 至 C++1x)與 C 標準(從 C89 至 C11)的重疊情況,並提供成功編譯與連結混合 C 與 C++ 程式碼庫所需的特定機制,例如 extern "C"

學習成果:

  • 使用命令列工具識別並驗證 C++ 編譯器環境與目標架構。
  • 解釋 C(C89、C99、C11)與 C++(C++98、C++1x)之間的標準相容性與重疊歷史。
  • 透過 extern "C" 標頭與多階段編譯工作流程,實現功能性的跨語言連結。

🔹 第二課:語言易用性:現代語法與模板

概要: 本課探討從 C++11 到 C++20 期間 C++ 的演進,聚焦於提升程式碼清晰度、型別安全與模板靈活性的改進。學生將掌握現代語法特性,如型別推導、使用 constexpr 的編譯時期評估,以及包含可變參數模板與折疊表達式的進階模板技術。

學習成果:

  • 使用 nullptr 消除指標歧義,並利用 constexprif constexpr 實作編譯時期邏輯。
  • 使用 autodecltype 與型別別名(using)簡化複雜宣告,同時以 overridefinal 確保穩固的物件導向設計。
  • 利用可變參數模板、折疊表達式與非類型模板參數推導,設計高度通用的程式碼。

🔹 第三課:執行時期優化:Lambda 與搬移語意

概要: 本課涵蓋現代 C++(C++11/14)引入的重要執行時期優化,重點在函數式程式設計構造與高效資源管理。學生將精通 Lambda 表達式——包括 C++14 的通用與運算式捕捉——並深入探討搬移語意、值類別(左值/右值)、完美轉送等機制,以消除高效率應用中的不必要的深層複製。

學習成果:

  • 使用多種捕捉模式(值、引用、運算式、通用)定義並實作 Lambda 表達式。
  • 使用 std::functionstd::bind 建立彈性函數包裝器與部分函數應用。
  • 將表達式分類為左值(Lvalues)、純右值(Prvalues)與臨時量(Xvalues),並應用搬移語意優化類別資源管理。

🔹 第四課:現代容器:std::array

概要: 本課介紹 std::array,這是自 C++11 引入的傳統 C 風格陣列之現代替代方案。探討使用固定大小容器封裝原始陣列的優勢,同時提供更安全、符合 STL 相容介面與棧上記憶體配置。

學習成果:

  • 区分 std::array(固定大小、棧上)與 std::vector(動態大小、堆上)的記憶體模型與使用情境。
  • 使用成員函數如 .size().empty() 正確初始化與管理 std::array
  • std::array 物件應用標準模板程式庫(STL)演算法與範圍迴圈。

🔹 第五課:智慧指標與 RAII 記憶體管理

概要: 本課介紹資源取得即初始化(RAII)作為現代 C++ 記憶體管理的基礎哲學。內容涵蓋從手動指標處理過渡至使用 std::unique_ptr(專屬擁有權)、std::shared_ptr(參考計數共享)與 std::weak_ptr(打破循環依賴)的自動化管理。

學習成果:

  • 理解並應用 RAII 原則,確保資源在作用域結束時被釋放。
  • 使用 std::shared_ptrstd::unique_ptr 實作共享與專屬擁有權模型。
  • 透過 std::weak_ptr 識別並解決由循環引用導致的記憶體洩漏。

🔹 第六課:正規表示式與字串解析

概要: 本課介紹使用 C++11 標準程式庫(std::regex)實現正規表示式,並實際應用於解析 HTTP 請求。學生將學習正規表示式量化符語法、std::smatch 的結果捕獲方式,以及這些工具在基於模板的網路伺服器環境中的架構整合。

學習成果:

  • 識別並應用正規表示式特殊字元(量化符)來定義字串模式。
  • 使用 std::regexstd::smatch 進行檔名驗證與字串資料提取。
  • 實作核心伺服器邏輯,包括使用現代 C++ 記憶體模型與容器進行 HTTP 請求解析與資源映射。

🔹 第七課:平行性、並行與記憶體模型

概要: 本課探討 C++11 向標準化多執行緒模型的根本轉變。從基本的執行緒管理與基於 RAII 的鎖定,過渡到先進的同步原語,如未來(futures)與條件變數,最後深入嚴謹的 C++11 記憶體模型、原子操作與記憶體一致性保證。

學習成果:

  • 使用 std::threadstd::mutex 與 RAII 包裝器(std::lock_guardstd::unique_lock)管理執行緒生命週期並保護共享資源。
  • 使用 std::futurestd::packaged_taskstd::condition_variable 實作非同步工作流程與執行緒通訊。
  • 使用 std::atomic 類型並選擇適當的 std::memory_order 策略,確保記憶體可見性並防止非法指令重排。

🔹 第八課:標準程式庫:檔案系統更新

概要: 本課探討 C++ 標準程式庫的演進,著重於自 C++11 及後續標準引入的高階功能。強調從平台特定或底層實作,轉向標準化、高階工具如 std::filesystem 與併發工具的轉變。

學習成果:

  • 識別在 C++11 中新增至標準程式庫的核心併發元件。
  • 認識 std::filesystem 為現代路徑與檔案管理的重大新增功能。
  • 理解高階抽象在現代化 C++ 開發中的角色。

🔹 第九課:其他現代功能

概要: 本課介紹自 C++11 引入並在後續標準中進一步完善的多項重要功能,以提升型別安全、效能與程式碼可讀性。學生將學習 long long int 類型、使用 noexcept 的例外狀況宣告、增強的字串與使用者定義字面常數,以及透過 alignofalignas 實現細粒度記憶體對齊控制。

學習成果:

  • 認識並實作 long long int 類型以擴展整數精確度。
  • 使用 noexcept 修飾符優化例外處理,並利用 noexcept 運算子查詢函數安全性。
  • 使用原始字串字面常數簡化複雜字串定義,並建立使用者定義字面常數以支援自訂類型後綴。

🔹 第十課:C++20:語言的未來

概要: 本課介紹 C++20 的「四大支柱」:概念(Concepts)、模組(Modules)、協程(Coroutines)與範圍(Ranges)。這些功能代表自 C++11 以來語言最重大的演進,著重於提升模板安全性、編譯效率、非同步程式設計與函數式風格的資料處理。

學習成果:

  • 認識並描述 C++20 標準引入的四項主要功能。
  • 解釋概念(Concepts)與限制(Constraints)在改善模板錯誤處理與設計中的角色。
  • 辨別傳統基於標頭檔的方式與新的模組系統之間的差異。