一、现代 C++ 设计核心理念

  1. RAII 资源自动管理资源(内存、文件、锁、网络句柄)在构造时获取,析构时自动释放,不用手动 new/delete、不用手动关文件、解锁。代表:智能指针、std::lock_guardstd::fstream

  2. 值语义 + 移动语义优先用对象代替裸指针,能移动不拷贝,大幅减少内存开销和拷贝耗时。

  3. 编译期优先能用编译期计算就不运行期算:constexpr、模板、常量表达式,提速 + 类型安全。

  4. 类型安全,规避野指针 / 隐式转换弃用裸指针、NULL,用nullptr、强类型、禁止危险隐式转换。

  5. 泛型编程 + 标准库优先少手写数据结构,优先 STL 容器、算法、不用重复造轮子。


二、基础语法升级(C++11 必会)

1. 类型推导

  • auto:自动推导变量类型,简化长类型
  • decltype:推导表达式的类型
  • decltype(auto):保留引用、CV 属性

2. 统一列表初始化

cpp

运行

int a{1};
vector<int> v{1,2,3};

防止缩窄转换、语法统一。

3. nullptr 空指针

替代 NULL类型安全,区分空指针和整数 0。

4. 范围 for 循环

cpp

运行

for(auto& x : vec) { ... }

遍历容器、字符串更简洁。

5. 委托构造 / 继承构造

  • 一个构造函数调用本类其他构造
  • 子类直接继承父类构造函数,不用重复写。

6. 类关键字强化

  • override:显式声明重写虚函数,编译器检查签名是否一致
  • final:禁止类被继承、禁止虚函数被重写
  • default:使用编译器默认生成构造 / 拷贝 / 析构
  • delete:禁用拷贝构造、赋值、特定函数

7. constexpr 常量表达式

修饰变量 / 函数,编译期就能算出结果,运行期零开销。

8. 右值引用 && 移动语义

  • 左值:有名字、可取地址
  • 右值:临时值、无名字
  • T&& 右值引用,接管临时对象资源
  • std::move:强制把左值转成右值,触发移动构造 / 赋值

拷贝 vs 移动:拷贝复制数据,移动只是转移资源所有权,极快。

9. Lambda 匿名函数

cpp

运行

[=](int x){}(10);    // 值捕获
[&](int x){}(10);    // 引用捕获
[this](){ };         // 类内捕获this

替代普通回调、配合 STL 算法、线程、异步任务。


三、智能指针(现代 C++ 内存管理核心)

杜绝裸指针、内存泄漏、野指针。

  1. std::unique_ptr独占所有权,不可拷贝,只能移动;轻量零开销,首选。

  2. std::shared_ptr引用计数共享所有权,多个指针共用同一资源;计数为 0 自动释放

  3. std::weak_ptr不增加引用计数,解决 shared_ptr 循环引用,用来观察资源是否有效。

原则:能用 unique 不用 shared,能用 shared 不用裸指针。


四、STL 容器与算法(现代工程必备)

常用容器选型

  • vector:连续内存,随机访问快,尾插高效
  • array:固定大小数组,比原生数组更安全
  • string:字符串,支持 SSO 短字符串优化
  • map/set:红黑树,有序、O (logn)
  • unordered_map/unordered_set:哈希表,平均 O (1) 查找
  • deque:头尾插入都快
  • list:双向链表,任意位置增删快,无随机访问

核心算法

sortfindcountfor_eachtransformaccumulatelower_bound/upper_bound

迭代器失效

vector 扩容、删除会失效;list 插入删除基本不失效,面试高频。


五、模板进阶

  1. 函数模板 / 类模板:泛型复用一套代码适配多类型
  2. 模板特化:全特化、偏特化,给特定类型定制实现
  3. 可变参数模板:处理任意个数参数,用于封装日志、格式化
  4. C++20 Concepts:给模板加类型约束,报错友好、限制非法类型

六、并发编程(现代 C++ 原生多线程)

  1. std::thread:创建线程
  2. std::mutex / std::lock_guard / unique_lock:互斥锁,保护共享数据
  3. std::condition_variable:条件变量,线程等待 / 唤醒同步
  4. std::atomic:原子类型,无锁编程,解决多线程数据竞争
  5. 线程池、异步 std::asyncstd::future 任务获取返回值

七、C++17 核心特性

  1. 结构化绑定

cpp

运行

auto [a, b] = pair{1,2};
  1. 类模板参数推导
  2. std::optional 可空类型,替代无效值魔数
  3. std::variant 多类型联合体,类型安全
  4. std::any 任意类型容器
  5. 折叠表达式、内联变量

八、C++20 重磅核心

  1. 模块 Modules:替代头文件,编译更快、解决头文件重复依赖
  2. Concepts:模板约束,替代晦涩的 SFINAE
  3. 协程 Coroutine:异步编程、IO 多路复用,写法更优雅
  4. 范围 Range:优雅链式处理容器,替代老式算法
  5. consteval / constinit:强化编译期计算

九、现代 C++ 开发准则(必背)

  1. 优先 STL 容器,不手写数组链表
  2. 优先智能指针,杜绝裸指针满天飞
  3. 优先移动,减少深拷贝
  4. 多用 auto、lambda,代码简洁
  5. 资源一律 RAII 管理,不手动释放
  6. 能用编译期就不扔到运行期
  7. 少用继承,多用组合;少用多态滥用

更多推荐