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