现代 C++ 核心详解(C++11/14/17/20 全覆盖,学习 + 面试通用)
一、现代 C++ 设计核心理念
-
RAII 资源自动管理资源(内存、文件、锁、网络句柄)在构造时获取,析构时自动释放,不用手动
new/delete、不用手动关文件、解锁。代表:智能指针、std::lock_guard、std::fstream。 -
值语义 + 移动语义优先用对象代替裸指针,能移动不拷贝,大幅减少内存开销和拷贝耗时。
-
编译期优先能用编译期计算就不运行期算:
constexpr、模板、常量表达式,提速 + 类型安全。 -
类型安全,规避野指针 / 隐式转换弃用裸指针、
NULL,用nullptr、强类型、禁止危险隐式转换。 -
泛型编程 + 标准库优先少手写数据结构,优先 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++ 内存管理核心)
杜绝裸指针、内存泄漏、野指针。
-
std::unique_ptr独占所有权,不可拷贝,只能移动;轻量零开销,首选。
-
std::shared_ptr引用计数共享所有权,多个指针共用同一资源;计数为 0 自动释放。
-
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:双向链表,任意位置增删快,无随机访问
核心算法
sort、find、count、for_each、transform、accumulate、lower_bound/upper_bound
迭代器失效
vector 扩容、删除会失效;list 插入删除基本不失效,面试高频。
五、模板进阶
- 函数模板 / 类模板:泛型复用一套代码适配多类型
- 模板特化:全特化、偏特化,给特定类型定制实现
- 可变参数模板:处理任意个数参数,用于封装日志、格式化
- C++20 Concepts:给模板加类型约束,报错友好、限制非法类型
六、并发编程(现代 C++ 原生多线程)
- std::thread:创建线程
- std::mutex / std::lock_guard / unique_lock:互斥锁,保护共享数据
- std::condition_variable:条件变量,线程等待 / 唤醒同步
- std::atomic:原子类型,无锁编程,解决多线程数据竞争
- 线程池、异步
std::async、std::future任务获取返回值
七、C++17 核心特性
- 结构化绑定
cpp
运行
auto [a, b] = pair{1,2};
- 类模板参数推导
std::optional可空类型,替代无效值魔数std::variant多类型联合体,类型安全std::any任意类型容器- 折叠表达式、内联变量
八、C++20 重磅核心
- 模块 Modules:替代头文件,编译更快、解决头文件重复依赖
- Concepts:模板约束,替代晦涩的 SFINAE
- 协程 Coroutine:异步编程、IO 多路复用,写法更优雅
- 范围 Range:优雅链式处理容器,替代老式算法
- consteval / constinit:强化编译期计算
九、现代 C++ 开发准则(必背)
- 优先 STL 容器,不手写数组链表
- 优先智能指针,杜绝裸指针满天飞
- 优先移动,减少深拷贝
- 多用
auto、lambda,代码简洁 - 资源一律 RAII 管理,不手动释放
- 能用编译期就不扔到运行期
- 少用继承,多用组合;少用多态滥用
更多推荐

所有评论(0)