前言

https://www.bilibili.com/video/BV1pu411y7n1
https://www.bilibili.com/video/BV1RV4y1x7qH

  上面两个链接是 李老师 的直播视屏。
  虽然 李老师 在卖课。
  但他免费的直播对我 C++ 小白来说,非常有用,让我对 C++ 语言有了一个大局观的认识。
  这样才能更好地定位到自己学习的情况。
  下面是对他 PPT 内容的一些总结汇总。

C++ 道法器术

  • C++ 5个术
      1. 类型系统
      1. 编译映射
      1. 内存管理
      1. 设计范式
      1. 习语与规范
  • 设计范式
      1. 面向过程
      1. 面向对象
      1. 泛型编程
      1. 函数式编程
      1. 模板化编程
  • 时空人
    • 时间分析 – 发生在什么时候
    • 空间分析 – 变量/对象放在哪里
    • 人物分析 – 代码哪来的,如何耦合
  • 模块一 C++ 类型系统与设施
    • 类型基础
      • 存储: 堆 栈 全局区
      • 值语义与引用语义
      • 指针与引用
      • 初始化与生命周期
    • 其他类型
      • 数组序列: vector array 与 C数组
      • 字符串处理: string string_view与char*
      • 枚举类 联合 位域
      • 数据成员
      • 函数成员
      • 静态与实例成员
      • 操作符重载
    • 类型扩展
      • auto 与自动类型推断
      • const
      • volatile
      • 结构化绑定
    • 编译与构建
      • C++ 编译机制
      • 模块 (C++ 20)
      • GCC/Clang/MSVC
  • 模块二 C++ 面向对象编程
    • C++ 对象模型
      • 对象内存模型
      • 对象成员与指针成员
      • 对象布局 对齐 和尺寸
    • 三法则与五法则
      • 构造函数 / 析构函数
      • 拷贝构造函数 / 赋值操作符
      • 移动拷贝构造函数 / 移动赋值函数
      • 默认定义与删除规则
    • 继承: 类型抽象
      • 基类与子类
      • 成员的继承
      • 抽象类
      • 共有 私有 受保护继承
      • 多继承与虚继承
    • 多态: 运行时绑定
      • 虚函数
      • 虚函数表
      • 虚析构函数
      • 运行时绑定
      • dynamic_cast
    • 面向对象设计
      • 实现继承与接口继承
      • 组合与继承
      • 编译时 VS 运行时绑定
      • 设计模式: Template Strategy Observer
  • 模块三 内存管理: 原理 优化技巧与避免踩坑
    • RAII: 内存与资源管理
      • 内存与资源
      • 资源获取即初始化 (RAII)
      • C++ Java Go Rust 内存管理对比
    • 智能指针
      • unique_ptr
      • shared_ptr
      • weak_ptr
    • 移动语义
      • 右值与左值
      • 移动构造与移动赋值
      • 移动与拷贝
      • 临时对象与返回值优化(RVO)
      • std::move 操作
      • std::forward 操作
    • new 与 delete 扩展
      • 全局 new 与 delete
      • new 与 delete 操作符
      • placement new
      • nothrow new
  • 模板机制
    • 参数化类型
      • 类模板
      • 类型参数与值参数
      • 模板参数推到
      • 参数的隐式绑定
    • 参数化操作
      • 函数模板
      • 函数对象
      • lambda 表达式
      • 函数式编程
    • 实用类型
      • pair 与 tuple
      • variant optional any
      • bitset
    • 模板扩展
      • 模板编译模型
      • 类型别名
      • 模板特化
      • 可变参数模板
      • constexpr 编译时计算
      • SFINAE \ enable_if \ Tag Dispatching \ if constexpr
      • 模板元编程
  • 模块五 泛型编程与 STL
    • 容器
      • 容器概述
      • STL 中的常用容器
      • 容器及操作性能考虑
      • 容器最佳实践
    • 算法
      • STL 算法概览
      • 不同算法的性能考虑
      • 编写泛型算法
      • 适配器
    • 迭代器
      • 迭代器概念
      • STL 中的迭代器
      • Ranges 与 for
    • 概念 (Concept)
      • 类型约束与接口规约
      • 概念定义
      • STL 常用概念
  • 设计原则 Design Principle
    • 正交设计四原则
      • 消除重复性
      • 分离关注点
      • 减少不必要地依赖
      • 向稳定的方向依赖
    • 整洁代码三原则
      • KISS 原则 (简单以理解)
      • DRY 原则 (不要重复自己)
      • 迪米特原则 (最小依赖)
    • SOLID 五大设计原则
      • 单一职责原则 (SRP)
      • 开闭原则 (OCP)
      • 里氏替换原则(LSP)
      • 接口隔离原则(ISP)
      • 依赖倒置原则(DIP)
    • 面向对象三原则
      • 封装责任 隔离变化
      • 优化使用对象组合 而不是类继承
      • 针对接口编程 而不是针对实现编程
  • 设计习语 Design Idiom
    • RAII 资源获取即初始化
    • Scope Guard 范围守卫
    • Copy & Swap 拷贝后转换
    • SOO 小对象优化
    • Local Buffer 本地缓存
    • Copy-On-Write (COW) 变更时拷贝
    • EBCO 空基类优化
    • Virtual Constructor 虚构造器
    • Pimpl 指向实现的指针
    • NVI (Non-Virtual Interface) 非虚接口
    • CRTP 奇异递归模板模式
    • Mixin 混入类
    • Policy Design 策略设计
    • Type Traits 类型萃取
    • Lambda 重载
    • Tag Dispatcher 标签分发
    • Type Erasure 类型擦除
    • SFINAE 替换失败不是错误
    • Named Template Arguments / Method Chain 命名模板参数 / 方法链
  • 从管理变化的角度理解设计模式
    • 晚期扩展
      • Template Method
      • Builder
    • 策略对象
      • Strategy
      • Observer / Event
    • 对象创建
      • Factory Method
      • Abstract Factory
      • Prototype
    • 单一职责
      • Decorator
      • Bridge
    • 行为变化
      • Command
      • Visitor
    • 接口隔离
      • Adapter
      • Proxy
      • Facade
      • Mediator
    • 对象性能
      • Singleton
      • Flyweight
    • 数据结构
      • Composite
      • Iterator
      • Chain of Responsible
    • 状态变化
      • State
      • Memento
    • 领域规则
      • Interpreter

接口设计

语言构造 习语与模式
封装 - 接口隔离 Pimpl
多态基类 - 接口合约 NVI
泛型隐式接口 Template Method
Type Traits Factory
Tag Dispatching Adapter
SFINAE Proxy
概念 – 泛型显示接口 Facade
Composite
Iterator

继承设计

语言构造 习语与模式
继承 EBCO
多继承 CRTP
虚继承 Bridge
实现继承 Mixin
接口继承 Decorator
变参继承

内存设计

语言构造 习语与模式
对象生命周期 RAII
值语义/引用语义 Scope Guard
对象内存布局 SOO
智能指针 {unique_ptr shared_ptr weak_ptr} Local Buffer
移动语义 Copy-On-Write
Singleton
Flyweight

回调设计

语言构造 习语与模式
函数指针 Policy Design
多态对象 (策略 命令) Strategy
函数对象 (仿函数) Observer
函数适配器 (bine mem_fn) Command
Lambda 表达式 Lambda Overload
std::function (多态回调对象) Visitor
std::invoke (多态调用)
std::invocable (回调概念)