C++编译链接与模板元编程深度解析
📚 共计 30 章节
01
C++与编译原理概述
从源码到可执行文件的完整旅程,预处理、编译、汇编、链接四阶段详解。
编译流程
四阶段
02
预处理深入
宏定义(#define)、条件编译(#ifdef)、文件包含(#include)的底层机制与陷阱。
宏
条件编译
03
编译前端
词法分析、语法分析、语义分析——编译器如何读懂你的代码。
词法
语法
语义
04
编译后端
中间代码生成、优化、目标代码生成——从抽象语法树到机器码。
IR
优化
05
符号表与作用域
编译器如何管理变量、函数、类型的名字与地址。
符号
作用域
06
目标文件格式
ELF/PE/Mach-O结构解析,节区(section)、段(segment)、符号表详解。
ELF
PE
Mach-O
07
静态链接(上)
链接器的工作原理,符号解析与重定位的核心机制。
重定位
符号解析
08
静态链接(下)
静态库(.a/.lib)的创建与使用,链接顺序问题与常见错误。
静态库
链接顺序
09
动态链接
共享库(.so/.dll)的加载机制,位置无关代码(PIC),延迟绑定(PLT/GOT)。
PIC
PLT/GOT
10
运行时加载
dlopen/dlsym动态加载库,插件架构的实现原理。
dlopen
插件
11
C++对象模型(上)
类与对象的内存布局,虚函数表(vtable)的构造与继承。
vtable
内存布局
12
C++对象模型(下)
多重继承、虚继承的内存布局,this指针调整与thunk技术。
多重继承
thunk
13
RTTI与异常处理
运行时类型识别(typeid/dynamic_cast)的实现,栈展开与异常处理机制。
RTTI
栈展开
14
模板基础
函数模板与类模板的定义、实例化、特化与偏特化。
模板
特化
15
模板元编程入门
编译期计算,类型萃取(type traits)的基本原理。
编译期
type traits
16
SFINAE与enable_if
替换失败不是错误,如何用SFINAE实现编译期分支选择。
SFINAE
enable_if
17
变参模板
可变参数模板的展开模式,递归继承与折叠表达式。
变参
折叠表达式
18
模板元编程进阶
编译期列表(typelist)、编译期算法、编译期排序。
typelist
编译期算法
19
constexpr与consteval
编译期求值,constexpr函数与constexpr构造函数。
constexpr
consteval
20
if constexpr
编译期条件分支,简化模板元编程的利器。
if constexpr
编译期分支
21
概念(concepts)
C++20的约束与概念,如何编写更清晰的模板接口。
C++20
约束
22
模板元编程实战
实现一个编译期JSON解析器或编译期正则表达式。
编译期JSON
正则
23
CRTP与奇异递归模板模式
静态多态的实现,代码复用的高级技巧。
CRTP
静态多态
24
Policy-Based设计
基于策略的类设计,模板参数作为配置策略。
Policy
策略
25
表达式模板
惰性求值与领域特定语言(DSL)的编译期实现。
惰性求值
DSL
26
编译期反射
C++的反射现状,magic_get等库的原理,未来标准提案。
反射
magic_get
27
链接期优化(LTO)
链接时优化的工作原理,如何开启与调试LTO。
LTO
链接优化
28
ABI兼容性
C++的二进制接口问题,名称修饰(name mangling),跨编译器/跨版本兼容。
ABI
name mangling
29
构建系统与依赖管理
CMake/Meson的编译与链接配置,vcpkg/Conan包管理。
CMake
vcpkg
Conan
30
性能分析与调试
编译时间优化技巧,模板实例化膨胀的诊断,链接错误排查。
编译时间
模板膨胀