C++ 的 #include 模型已经用了四十多年。它的工作方式简单粗暴:预处理器把被包含文件的内容文本复制到 #include 的位置,然后编译器对着拼接后的翻译单元(translation unit)开始解析。
这个模型有三个根本性的缺陷:
- 重复编译:每份头文件被每个
.cpp独立编译一次(N个翻译单元 =N次完全相同的前端处理) - 宏污染:
#define影响它之后的所有#include,不按作用域隔离 - 物理耦合:包含了什么头文件,就是暴露了它们全部的符号——没有导出控制
C++20 Modules 正是为了解决这三个问题而诞生的。它把"编译中间结果"提升为一等公民,让编译器的前端工作从 O(N × headers) 降到 O(headers + N)。
2026/5/6大约 6 分钟