C++核心技术:从基础到进阶
第一部分:C++基础核心
1.1 基础语法与控制结构
1.变量与类型
- 基本类型(
int
,float
,bool
等)与类型转换(显式static_cast
vs 隐式转换) - 复合类型:数组、结构体、枚举(
enum class
强类型枚举)
2.控制流
if-else
、switch-case
(注意fall-through
问题)- 循环:
for
、while
、do-while
与范围for
(C++11)
1.2 函数与指针
- 函数基础
- 参数传递(值传递、引用传递
&
、指针传递*
) - 返回值与
return
语句
- 指针与引用
-
- 指针算术、
nullptr
(C++11替代NULL
) - 引用本质(别名机制)、右值引用基础(
&&
初步)
- 指针算术、
1.3 面向对象编程(OOP)
- 类与对象
- 成员变量与方法、访问控制(
public
/private
/protected
) - 构造函数、析构函数与拷贝控制(拷贝构造、拷贝赋值)
- 成员变量与方法、访问控制(
- 多态与继承
- 虚函数与动态绑定(
virtual
关键字) - 继承体系中的构造/析构顺序
- 虚函数与动态绑定(
第二部分:现代C++核心特性(C++11/14/17)
2.1 类型推导与自动资源管理
- **
auto
与decltype
**auto
的类型推导规则(忽略顶层const
、引用折叠规则)decltype(auto)
(C++14)保留完整类型信息
- 智能指针
std::unique_ptr
(独占所有权)、std::shared_ptr
(引用计数)- 循环引用问题与
std::weak_ptr
解决方案
2.2 移动语义与右值引用
- 移动构造与移动赋值
- 资源所有权转移的实现原理(指针交换+源对象置空)
std::move
的本质(类型转换,非移动操作本身)
- 完美转发
std::forward
与引用折叠规则(T& &&
折叠为T&
)
2.3 Lambda表达式与函数式编程
- Lambda语法
[capture] (params) -> return_type { body }
的捕获列表(值捕获[=]
、引用捕获[&]
)- 泛型Lambda(C++14的
auto
参数)
- **
std::function
与可调用对象**- 函数指针、函数对象(仿函数)、Lambda的统一封装
第三部分:内存模型与底层控制
3.1 对象生命周期与内存布局
- 构造/析构顺序
- 全局对象、局部静态对象、线程局部存储(TLS)的初始化时机
- 继承体系中的构造/析构顺序(基类→派生类)
- 内存对齐
alignas
指定对齐值、alignof
查询对齐要求- 结构体填充(Padding)与内存优化
3.2 自定义内存管理
- **重载
new/delete
**- 全局重载与类特定重载的区别
- 内存池实现原理(固定块分配器示例)
- placement new
- 在已分配内存上构造对象(
new (ptr) Type
)
- 在已分配内存上构造对象(
第四部分:并发与并行编程基础
4.1 线程与同步原语
- **
std::thread
基础**- 线程创建、
join()
与detach()
- 线程局部存储(
thread_local
关键字)
- 线程创建、
- 互斥锁与条件变量
std::mutex
、std::lock_guard
(RAII锁管理)std::condition_variable
(生产者-消费者模型示例)
4.2 原子操作
- **
std::atomic
基础**- 原子类型(
atomic
、atomic_flag
) load()
、store()
、exchange()
等操作
- 原子类型(
第五部分:性能优化基础
5.1 编译期优化
- **
constexpr
函数**- 在编译期计算常量表达式(C++11到C++20的演进)
- 内联与编译器优化
inline
关键字的作用与编译器行为- 常见优化技术(循环展开、函数内联)
5.2 缓存友好设计
- 数据局部性原则
- 时间局部性与空间局部性
- 结构体成员排列顺序优化(高频访问字段靠前)
第六部分:进阶主题(后续可扩展)
**6.1 模板元编程与concepts
**
- **SFINAE与
std::enable_if
**- 编译期类型筛选技术
- **C++20
concepts
**- 约束模板参数的直观语法
6.2 协程与异步编程
- 协程基础概念
co_await
、co_yield
、co_return
的语义- Promise类型与协程状态机
6.3 现代C++工具链
- 模块化编程(C++20)
- 替代头文件的模块接口(
module
与import
)
- 替代头文件的模块接口(
- 静态分析工具
- Clang-Tidy、Cppcheck的典型用法