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]] 、有符号/无符号整数、循环、循环提升、循环展开、断言、编译器提示[[assume]]/std::unreacheable() 、递归24. 优化 III - 非编码优化和基准测试
gprof 、 uftrace 、 callgrind 、 cachegrind 、 perf Linux 分析器25. 软件设计 I - 基本概念(草案)
26. 软件设计 II - 设计模式和惯用语(草案)
如果您发现任何拼写错误、概念错误或需要改进的部分,请使用issue面板进行报告。
Federico Busato ,https://federico-busato.github.io/