C++
目录
cpp/
├── README.md # 目录,C++ 体系总览
|
|-- Core/ # 核心语言基础(11个文件)
| |-- Modules.md # C++20/C++23 Module 的语法与使用
| |-- Expressions.md # 聚合初始化、三路比较 `<=>`
|
├── Templates/ # 模板、概念(`Concepts`)、元编程等
│ ├── Concepts.md # C++20 Concepts 语法与使用
│
准大纲
下面是 deepseek 帮忙生成的大纲,我可以参考这个目录结构来构建 C++ 知识体系。
cpp/
├── _index.md # C++体系总览:学习路径、前置要求、经典书籍索引
├── 01-core/ # 核心语言基础(11个文件)
│ ├── _index.md # 本部分概览:所有不涉及类与模板的基础语言构件
│ │
│ ├── type-system.md # 基础类型(int/double/char等)的字面量与表示范围、
│ │ # 类型别名(using/typedef)、cv限定符(const/volatile)、
│ │ # auto类型推导规则与陷阱(大括号初始化、auto&、auto&&)、
│ │ # decltype推导规则与decltype(auto)
│ │
│ ├── expressions.md # 表达式求值顺序与副作用(前置vs后置++的差异)、
│ │ # 算术/逻辑/位运算符的完整覆盖、条件运算符(?:)的
│ │ # 类型确定规则(两个分支的公共类型)、逗号运算符、
│ │ # 三路比较<=>(C++20):强序/弱序/部分序的语义区别、
│ │ # 默认生成规则(成员逐一按声明顺序比较)、与==的交互、
│ │ # 自定义类型的<=>实现、运算符优先级与结合性速查
│ │
│ ├── control-flow.md # if/switch/for/while基础控制流、范围for的底层原理
│ │ # (begin/end非成员查找与ADL)、if constexpr(C++17)与
│ │ # 普通if的区别(编译期分支消除)、初始化语句(C++17/20)
│ │
│ ├── functions.md # 函数声明与定义、参数传递方式(值/引用/指针)的选择原则、
│ │ # 默认实参与重载的交互陷阱、inline的现代语义(
│ │ # 链接而非优化提示)、函数指针与std::function的使用场景
│ │
│ ├── overload-resolution.md # 重载决议完整流程:名字查找→ADL(实参依赖查找)→
│ │ # 模板推导→可行函数集→最佳匹配(标准转换vs用户定义转换)、
│ │ # 二义性与消歧(f(v) vs f({v}))、SFINAE在重载中的作用、
│ │ # 已删除函数的重载参与(导致编译错误)
│ │
│ ├── lambdas.md # Lambda语法演进(C++11/14/17/20):捕获列表([=]/[&]/[this]/
│ │ # [*this](C++17)/显式捕获)、泛型lambda(auto参数C++14)、
│ │ # 模板lambda(C++20)、初始化捕获([x = std::move(val)])、
│ │ # 无状态lambda与函数指针的隐式转换
│ │
│ ├── structured-bindings.md # 结构化绑定(C++17):绑定到数组(按索引)、元组(按get<>)、
│ │ # 结构体/类(按public成员)、值绑定vs引用绑定、
│ │ # 与auto推导的交互、底层实现(编译器生成的匿名对象)
│ │
│ ├── constexpr.md # constexpr变量(编译期常量)与函数(C++11→20进化)、
│ │ # consteval立即函数(C++20):必须产生编译期结果、
│ │ # constinit(C++20)保证静态初始化、编译期new(C++20)、
│ │ # 编译期vector/string使用限制(不可传递到运行时)
│ │
│ ├── preprocessor.md # 宏定义与展开(#字符串化/##拼接)、条件编译(#if/#ifdef/
│ │ # #elif/#else/#endif)、include guard与#pragma once、
│ │ # __has_include(C++17)、预定义宏(__LINE__/__func__/
│ │ # __DATE__/__cplusplus)、宏的常见陷阱(多次求值)
│ │
│ └── modules.md # 模块(C++20):import/export语法、模块分区(:part)、
│ # 全局模块片段(module;)、头文件单元(import <...>)、
│ # 编译速度优势实测、从#include到import的渐进迁移策略
│
├── 02-class/ # 类设计与运行时多态(14个文件)
│ ├── _index.md # 本部分概览:定义新类型的编译期机制与运行时行为
│ │
│ ├── class-fundamentals.md # class vs struct的唯一区别(默认访问权限)、
│ │ # 成员函数声明/定义、this指针、静态成员与常量成员、
│ │ # 成员函数限定符(const/&/&&/volatile重载)、
│ │ # mutable与const成员函数
│ │
│ ├── constructors-destructors.md # 默认/转换构造函数、委托构造(C++11)避免代码重复、
│ │ # 继承构造(using Base::Base C++11)、
│ │ # 析构函数与析构顺序(基类→成员→自身)、
│ │ # 拷贝/移动构造的简要引入(详细讨论见03-resource)
│ │
│ ├── member-layout.md # 成员对齐(alignof/alignas)、填充字节(padding)与
│ │ # 内存浪费、位域声明与跨平台问题(符号位/字节序)、
│ │ # 空基类优化(EBO)与no_unique_address(C++20)、
│ │ # POD/trivial/standard-layout类型特征与用途
│ │
│ ├── access-control.md # public/protected/private的访问规则(作用于类而非对象)、
│ │ # friend类/函数/成员函数、protected继承时的访问变化、
│ │ # 友元的传递性与封装权衡
│ │
│ ├── conversions.md # 隐式转换路径(转换构造函数/类型转换运算符)、
│ │ # explicit与explicit(bool)(C++20条件explicit)、
│ │ # 上下文转换到bool(if/while/!中的隐式bool)、
│ │ # 安全布尔惯用法(从operator bool到explicit operator bool)
│ │
│ ├── operator-overloading.md # 可重载运算符一览(42个)、成员vs非成员的选择原则、
│ │ # 对称运算符(==/<=>/-/+)的最佳实践(非成员函数)、
│ │ # 不能重载的运算符(. / .* / :: / ?: / sizeof/typeid等)、
│ │ # operator new/delete重载与分配器接口
│ │
│ ├── inheritance.md # public/protected/private继承的语义区别(is-a/has-a/
│ │ # 实现继承)、名字隐藏(派生类名字遮蔽基类)、
│ │ # using声明引入基类重载集、final类(C++11)阻止继承、
│ │ # 继承与组合的选择原则(组合优先于继承)
│ │
│ ├── multiple-inheritance.md # 多继承语法与构造顺序(基类声明顺序)、
│ │ # 菱形继承问题(最派生类含多个基类子对象)、
│ │ # 虚基类初始化规则(最派生类负责初始化虚基类)、
│ │ # 虚基类vs非虚基类的内存布局差异(vbptr vs 直接嵌入)
│ │
│ ├── virtual-functions.md # 虚函数声明与覆盖、vtable与vptr的典型实现(单继承模型)、
│ │ # override保证覆盖意图、final阻止进一步覆盖、
│ │ # 虚析构函数的重要性(delete基类指针时的UB)、
│ │ # 虚函数的默认参数陷阱(静态绑定默认值)
│ │
│ ├── nvi-and-interfaces.md # 纯虚函数(=0)与抽象类(不能实例化)、
│ │ # 接口类的最佳实践(纯虚+虚析构+无数据成员)、
│ │ # 非虚接口惯用法(NVI):公开非虚函数调用私有虚函数、
│ │ # NVI的ABI稳定性优势与前置/后置条件保证
│ │
│ ├── rtti.md # typeid运算符与type_info类(name()/hash_code())、
│ │ # dynamic_cast工作原理(运行时遍历继承树)、
│ │ # 向下转型的安全条件(必须有虚函数)、
│ │ # RTTI的性能开销(字符串比较/vtable查找)与禁用场景(-fno-rtti)
│ │
│ ├── exceptions.md # throw/try/catch语法、异常对象拷贝与切片(值捕获vs引用捕获)、
│ │ # noexcept声明(C++11)与noexcept运算符(条件noexcept)、
│ │ # 异常安全三个保证(基本/强/不抛)、栈展开(销毁局部对象)、
│ │ # 异常中性(exception neutral)设计与构造函数中的异常
│ │
│ └── object-lifetime.md # 自动/静态/动态/线程存储期、thread_local(C++11)、
│ # 程序启动时全局对象初始化顺序问题(SIOF)与constexpr规避、
│ # 生命周期中的vtable切换(基类构造时指向基类vtable)
│
├── 03-resource/ # 值语义与资源管理(9个文件)
│ ├── _index.md # 本部分概览:C++最独特的语言哲学——值语义
│ │
│ ├── value-categories.md # C++值类别体系全景:左值(lvalue)/纯右值(prvalue)/
│ │ # 将亡值(xvalue)/泛左值(glvalue)/右值(rvalue)、
│ │ # C++17简化模型:值与对象的明确区分、
│ │ # decltype与值类别的对应规则((x) vs (expr))
│ │
│ ├── copy-control.md # 拷贝构造/赋值、移动构造/赋值的完整语法、
│ │ # 三/五/零法则(如果自定义其一,则需全部关注)、
│ │ # =delete(禁止)与=default(恢复默认)、
│ │ # 浅拷贝vs深拷贝(资源所有权)、
│ │ # 编译器隐式生成规则表(何时自动生成何时抑制)
│ │
│ ├── move-semantics.md # std::move的本质(static_cast到右值引用)、
│ │ # 移动后对象的状态保证(有效但未指定,如nullptr)、
│ │ # RVO/NRVO返回值优化(复制消除的编译器保证C++17)、
│ │ # 隐式移动(C++20):return局部变量时自动尝试移动
│ │
│ ├── forwarding-references.md # 转发引用(万能引用T&&)的推导规则(右值遇T→T,遇T&→T&)、
│ │ # 引用折叠规则(T& &→T&, T&& &→T&, T& &&→T&, T&& &&→T&&)、
│ │ # 转发引用的重载陷阱(与普通函数重载的交互)
│ │
│ ├── perfect-forwarding.md # std::forward实现原理(条件转换右值)、
│ │ # 完美转发工厂函数模式(make_shared/emplace_back)、
│ │ # 参数包完美转发(Args&&... args)、
│ │ # 常见失败场景(不能完美转发的表达式:0/NULL/位域)
│ │
│ ├── raii.md # 资源获取即初始化:构造获取、析构释放、
│ │ # 标准库RAII示例(lock_guard/fstream)、
│ │ # ScopeGuard惯用法(手动实现与std::experimental::scope_exit)、
│ │ # RAII与异常安全的天然契合(栈展开自动调用析构)
| |
│ ├── pmr-allocators.md # C++17 PMR内存资源与分配器:std::pmr::memory_resource、
│ │ # std::pmr::polymorphic_allocator、std::pmr::vector/string、内存池与自定义内存资源、
│ │ # PMR的优势(减少堆分配次数/避免内存碎片/提高缓存命中率)
│ │
│ ├── unique-ptr.md # unique_ptr:独占所有权语义、删除器(函数指针vs无状态
│ │ # 函数对象vs有状态函数对象)对大小的影响、make_unique(C++14)、
│ │ # 数组特化unique_ptr<T[]>与shared_ptr<T[]>的区别、
│ │ # 与raw指针的互操作(release/get/reset)、
│ │ # 使用最佳实践(工厂函数/容器/PIMPL)
│ │
│ ├── shared-ptr.md # shared_ptr:引用计数机制(控制块)、
│ │ # make_shared的内存合并优势(一次分配对象+控制块)、
│ │ # aliasing构造函数(共享所有权但指向不同对象)、
│ │ # enable_shared_from_this的CRTP用法与陷阱、
│ │ # 使用最佳实践(避免循环引用/线程安全)
│ │
│ └── weak-ptr.md # weak_ptr:打破循环引用的唯一方式、lock()与expired()、
│ # 观察者模式(Observer)的现代实现、缓存模式的实现技巧、
│ # 使用最佳实践(检查lock()返回值/expired()的TOCTOU问题)
│
├── 04-template/ # 模板与编译期编程(12个文件)
│ ├── _index.md # 本部分概览:参数化类型与编译期计算,分基础(前7)与进阶(后5)
│ │
│ ├── function-templates.md # 函数模板定义与模板参数列表、模板参数推导规则、
│ │ # auto推导(C++17简化函数模板)、模板参数vs函数参数、
│ │ # 函数模板重载与偏序(partial ordering)规则
│ │
│ ├── class-templates.md # 类模板定义与实例化(隐式/显式)、
│ │ # 成员函数定义位置(类内inline vs类外模板声明)、
│ │ # 成员模板与模板成员的区别、模板模板参数、
│ │ # friend与模板的组合(友元注入)
│ │
│ ├── template-deduction.md # 模板实参推导(ADT)的完整规则(非推导上下文)、
│ │ # CTAD(C++17):类模板实参推导(隐式推导指引)、
│ │ # 用户定义推导指引(自定义构造函数到模板参数的映射)、
│ │ # 聚合的CTAD(C++20)
│ │
│ ├── specialization.md # 全特化语法(函数的全特化 vs 模板函数重载)、
│ │ # 偏特化的匹配规则与偏序(partial ordering)、
│ │ # 显式实例化(explicit instantiation)减少编译时间、
│ │ # 隐式实例化点(POI)与ODR问题(跨翻译单元的一致实例化)
│ │
│ ├── variadic-templates.md # 参数包声明(typename... Args/auto...)、
│ │ # 包展开位置(表达式/类型/基类/初始化列表)、
│ │ # sizeof...(Args)获取参数个数、
│ │ # 递归解包(头元素+递归)vs折叠表达式(C++17一元/二元折叠)
│ │
│ ├── alias-and-variable-templates.md # 别名模板(using Alias = ...)作为类型元函数、
│ │ # 变量模板(C++14)template<T> constexpr T value = ...、
│ │ # 标准库_t(类型别名)/_v(变量模板)便捷接口、
│ │ # 模板参数默认值
│ │
│ ├── sfinae.md # SFINAE规则详解:替换失败不是错误(仅直接上下文)、
│ │ # std::enable_if的三种放置位置(返回值/模板参数/默认值)、
│ │ # void_t检测惯用法与detection idiom(C++20前)、
│ │ # if constexpr替代SFINAE的场景
│ │
│ ├── concepts.md # Concepts(C++20):concept定义语法(constexpr bool)、
│ │ # requires表达式(简单/类型/复合/嵌套)、requires子句、
│ │ # 标准库concept全览(iterator/range/invocable/regular等)、
│ │ # concept vs SFINAE的对比(错误信息/重载选择)
│ │
│ ├── type-traits.md # <type_traits>完整体系:类型查询(is_void/is_pointer/
│ │ # is_base_of/is_same等)、类型变换(remove_const/
│ │ # remove_reference/add_pointer/decay等)、
│ │ # 属性查询(is_trivial/is_standard_layout/
│ │ # is_trivially_copyable)、类型运算(conditional/
│ │ # common_type/underlying_type)
│ │
│ ├── tmp-basics.md # 编译期计算入门:递归模板终止条件(全特化)、
│ │ # 整数常量与integral_constant(值→类型映射)、
│ │ # 编译期选择conditional_t(类型)/conditional(值)、
│ │ # 编译期循环(模板递归展开/折叠表达式)
│ │
│ └── tmp-advanced.md # 进阶元编程:表达式模板(expression templates)
│ # 优化数值计算(Eigen库)、Policy-Based Design与Mixin、
│ # tag dispatch惯用法(iterator_category)、
│ # 元函数与高阶元函数、Typelist与相关算法(查找/排序/变换)
│
├── 05-containers-and-algorithms/ # 容器与算法(13个文件)
│ ├── _index.md # 本部分概览:标准库数据组织与操作的核心组件
│ │
│ ├── sequence-containers.md # vector(动态数组、增长因子1.5→2、reserve避免重新分配)、
│ │ # deque(双端队列、块状内存布局)、list(双向链表、splice
│ │ # 移动节点O(1))、array(C++11编译期大小)、
│ │ # forward_list(C++11单向链表)、容器选择决策树
│ │
│ ├── associative-containers.md # set/map(红黑树实现、节点稳定地址)、
│ │ # multiset/multimap(允许重复键)、
│ │ # 自定义比较器(透明比较C++14:is_transparent)、
│ │ # lower_bound/upper_bound/equal_range、等价vs相等
│ │
│ ├── unordered-containers.md # unordered_set/map(哈希表、分离链接法)、
│ │ # 桶操作(rehash/reserve预分配桶)、负载因子(max_load_factor)
│ │ # 与性能、自定义哈希函数(std::hash特化)、
│ │ # 等价键(KeyEqual)、hash与equal的一致性要求
│ │
│ ├── container-adaptors.md # stack(LIFO默认用deque)、queue(FIFO默认用deque)、
│ │ # priority_queue(堆默认用vector)、底层容器要求、
│ │ # flat_map/flat_set(C++23)的缓存友好优势与有序要求
│ |
│ ├── span-and-mdspan.md # std::span(C++20):零开销视图(指针+长度)、
│ │
│ ├── algorithms-overview.md # 算法库总览:分类体系(非修改/修改/排序/数值/重排)、
│ │ # 迭代器范畴与算法要求的映射、执行策略(C++17 seq/
│ │ # par/par_unseq)、复杂度约定(O(n log n)等)
│ │
│ ├── sorting-algorithms.md # sort(内省排序=快排+堆排+插入排序的混合)、
│ │ # partial_sort(部分排序)、nth_element(第n个元素)、
│ │ # stable_sort(归并排序保序)、is_sorted/sorted_until
│ │
│ ├── searching-algorithms.md # binary_search(二分查找)、lower_bound/upper_bound/
│ │ # equal_range(查找位置)、find/find_if/find_if_not、
│ │ # search(Boyer-Moore算法)、mismatch
│ │
│ ├── numeric-algorithms.md # iota(生成递增序列)/accumulate(累积)/inner_product、
│ │ # reduce/transform_reduce(C++17并行友好)、
│ │ # partial_sum(前缀和)、adjacent_difference(差分)、
│ │ # gcd/lcm(C++17整数最大公约数/最小公倍数)
│ │
│ ├── mutating-algorithms.md # copy/move/fill/generate、remove/unique与
│ │ # erase-remove惯用法(remove不改变容器大小)、
│ │ # rotate/shuffle/sample、partition/stable_partition
│ │
│ ├── heap-algorithms.md # make_heap(建堆O(n))/push_heap(O(log n))/
│ │ # pop_heap/sort_heap(堆排序)、
│ │ # priority_queue的内部实现(make_heap+push_heap+pop_heap)、
│ │ # 自定义比较器(max heap vs min heap)
│ │
│ ├── iterator-system.md # 迭代器类别(输入/输出/正向/双向/随机访问/连续)、
│ │ # iterator_traits(iterator_category/value_type/
│ │ # difference_type)、迭代器适配器(back_inserter/
│ │ # front_inserter/inserter/stream_iterator/reverse_iterator)
│ │
│ └── ranges.md # Ranges(C++20):range概念(sized_range/borrowed_range/
│ # viewable_range)、view的惰性求值特性(不拥有数据)、
│ # 适配器(filter/transform/take/drop/join/split)、
│ # 管道操作符|、action(C++23)即时求值、自定义view
│
├── 06-standard-library-utilities/ # 标准库设施(14个文件)
│ ├── _index.md # 本部分概览:标准库的支撑性通用组件
│ │
│ ├── string.md # std::string内部实现(SSO机制:典型15/22字节阈值)、
│ │ # 常用操作(查找find/rfind、替换replace、子串substr)、
│ │ # 与C字符串互操作(c_str/data)、std::pmr::string(多态分配器)
│ │
│ ├── string-view.md # std::string_view(C++17):零拷贝视图(char*+长度)、
│ │ # 作为函数参数的最佳实践(替代const string&)、
│ │ # dangling view陷阱(绑定到临时string)、substr的O(1)效率
│ │
│ ├── iostream.md # 流I/O体系:iostream(控制台)/fstream(文件)/
│ │ # sstream(字符串流)、格式化标志(flags/precision/width)、
│ │ # 与printf的效率对比、同步关闭(sync_with_stdio)
│ │
│ ├── formatting.md # std::format(C++20):占位符语法{}、格式说明符(:<宽度>/
│ │ # :<精度>/:<填充>)、自定义格式化器(std::formatter特化)、
│ │ # std::print(C++23直接输出)、编译期格式字符串检查
| | # charconv
│ │
│ ├── pair-and-tuple.md # std::pair(二元组)、std::tuple(可变元组)、std::tie(解包)、
│ │ # make_tuple、tuple_cat(拼接)、tuple_element/tuple_size、
│ │ # 结构化绑定与tuple的紧密关系
│ │
│ ├── optional.md # std::optional(C++17):有值或空、value()(抛异常) vs
│ │ # operator*(未定义行为) vs value_or()(默认值)、
│ │ # and_then/or_else(C++23单子操作链式调用)、
│ │ # std::optional<std::reference_wrapper<T>>包装引用
│ │
│ ├── variant.md # std::variant(C++17):类型安全的联合体(知道当前存储类型)、
│ │ # std::visit与访问者模式(overloaded惯用法)、
│ │ # std::get/std::get_if(按类型或索引)、
│ │ # valueless_by_exception异常状态、递归variant的惯用实现
│ │
│ ├── any-and-expected.md # std::any(C++17):任意类型容器(SBO小对象优化)、any_cast、
│ │ # std::expected(C++23):成功值或错误值的类型安全返回、
│ │ # and_then/or_else/transform单子操作
│ │
│ ├── regex.md # std::regex:正则表达式语法(ECMAScript默认/awk/grep/egrep)、
│ │ # 匹配(match/search/replace)、regex_iterator(遍历匹配)、
│ │ # 编译时性能优化、与string_view的交互
│ │
│ ├── random.md # <random>:随机数引擎(mt19937/linear_congruential)、
│ │ # 分布(均匀/正态/伯努利/泊松)、std::random_device(真随机)、
│ │ # seed管理(固定seed可复现)、避免rand()的原因(周期/分布/线程安全)
│ │
│ ├── chrono.md # std::chrono:duration时间段(算术与转换cast)、
│ │ # time_point时间点(与duration的关系)、
│ │ # clock类型(system_clock/steady_clock/high_resolution_clock)、
│ │ # 字面量(h/min/s/ms/us/ns C++14)
│ │
│ ├── calendar-and-timezone.md # 日历类型(C++20):year/month/day/weekday/month_day等、
│ │ # 日期算术(months/years +/-)、
│ │ # 时区(time_zone/zoned_time)、格式化输出(%F/%T/%z)
│ │
│ ├── filesystem.md # std::filesystem(C++17):path类操作(拼接/=、分解/
│ │ # filename/extension、规范化canonical)、
│ │ # 文件状态查询(exists/is_directory/file_size/permissions)、
│ │ # 目录遍历(recursive_directory_iterator)
│ ├── diagnostic-and-debugging.md # 现代 C++ 诊断与运行时排障
│ │ # std::stacktrace 捕获、static_assert 静态断言、C++23 [[assume]] 属性、编译期 ODR 违规检测
│ │
│ └── utility-and-other.md # 其他实用工具:std::move/std::forward(原理见03-resource,
│ # 此处总结使用场景)、std::swap与ADL、std::exchange、
│ # std::as_const、std::invoke(C++17)、
│ # std::reference_wrapper与std::ref/cref、
│ # std::to_underlying(C++23)
│
└── 07-concurrency/ # 并发与内存模型(12个文件)
├── _index.md # 本部分概览:多核时代的C++并发编程完整链路
│
├── thread-management.md # std::thread构造与生命周期、join(等待) vs detach(分离)、
│ # 线程标识(get_id)、std::jthread(C++20)自动join与
│ # stop_token协作式取消(request_stop/stop_requested)
│
├── mutex-and-lock.md # std::mutex/timed_mutex/recursive_mutex(递归锁)、
│ # lock_guard(简单RAII锁)/unique_lock(可延迟/转移所有权)/
│ # scoped_lock(C++17可变参数免死锁)、
│ # std::lock同时锁定多个互斥锁(死锁避免算法)
│
├── shared-mutex.md # std::shared_mutex(C++17):读写锁、
│ # shared_lock(读锁 多个线程可同时持有)与
│ # unique_lock(写锁 独占)、读写锁的性能权衡(
│ # 读多写少才有优势,否则普通mutex更优)
│
├── condition-variable.md # std::condition_variable:wait(原子释放锁+等待)/notify_one
│ # /notify_all、虚假唤醒(spurious wakeup)的成因与处理(
│ # 必须用while而非if)、生产者-消费者模式的多种实现
│
├── semaphore-and-barrier.md # std::counting_semaphore(C++20):计数信号量(max计数)、
│ # binary_semaphore(二元信号量)、std::latch(一次性倒计数
│ # 等待所有任务完成)、std::barrier(可重用同步点C++20)
│
├── atomics.md # std::atomic模板与特化(atomic_int/bool/pointer)、
│ # 原子操作(load/store/exchange/compare_exchange_strong/
│ # weak与CAS循环)、std::atomic_ref(C++20非原子对象包装)、
│ # is_lock_free与平台相关性
│
├── memory-order.md # memory_order六种枚举(relaxed/consume/acquire/release/
│ # acq_rel/seq_cst)、happens-before与synchronizes-with关系、
│ # release-acquire同步模式(生产者-消费者配对)、
│ # seq_cst的全局一致序(所有线程看到同一顺序)、
│ # relaxed的适用场景(简单计数器)与陷阱
│
├── fences.md # std::atomic_thread_fence(内存栅栏)、
│ # acquire/release/seq_cst fence与原子操作的对比(
│ # fence作用于线程的所有后续/前序操作而非单个变量)、
│ # 典型使用场景(非原子对象的同步)
│
├── lock-free-intro.md # 无锁编程的意义(避免锁的开销:阻塞/优先级反转)与代价
│ # (复杂度+ABA问题+内存回收)、CAS循环(compare-and-swap loop)
│ # 的基本模式、ABA问题与解决方案(带标记的指针tagged pointer)、
│ # 内存回收(hazard pointer/epoch/RP技术简介)
│
├── async-and-future.md # std::async启动策略(launch::async强制新线程 vs
│ # launch::deferred延迟执行)、std::future与
│ # std::shared_future(多等待者)、std::promise(设置值)、
│ # std::packaged_task(包装可调用对象)
│
└── coroutine-basics.md # 协程(C++20):co_await(等待)/co_yield(产出)/
# co_return(返回)、promise_type(协程控制块 自定义行为)、
# awaiter(await_ready/await_suspend/await_resume)、
# std::generator(C++23简化生成器)、
# 异步协程与io_uring结合的前瞻(零系统调用异步I/O)