文档目录
第一阶段(移动语义):
    左值/右值 → std::move 是 cast 不是 move
    → 右值引用变量本身是左值(面试陷阱)
    → 完美转发 std::forward 保持值类别

第二阶段(容器内存布局):
    vector:连续 → 缓存友好 → 扩容因子 1.5/2 → 迭代器失效
    list:节点散落 → 缓存灾难 → 除非频繁中间插入否则别用
    deque:中控+分块 → 两端 O(1) → stack/queue 默认容器
    unordered_map:桶+链表 → O(1)均摊 → rehash 是灾难
    map:红黑树 → O(log N) → 节点散落同样缓存不友好

第三阶段(智能指针):
    unique_ptr:零开销,就是裸指针
    shared_ptr:16字节,控制块+原子引用计数,make_shared合并分配
    weak_ptr:lock()做原子检查+增加,破循环引用

第四阶段(模板元编程):
    模板特化:全特化/偏特化(函数不能偏特化)
    Type Traits:编译期布尔值,通过模板偏特化实现
    SFINAE:替换失败不是错误,enable_if 条件启用
    if constexpr:编译期分支,不匹配分支不编译
    constexpr/consteval:编译期计算
    Concepts C++20:约束模板参数,报错清晰