C++20 Modules模块入门
请解释C++20 Modules如何改进了传统的头文件包含机制,并给出模块的导入导出示例。
回答
我是大山
Modules是C++20解决头文件问题的泛型化方案,优点:
- 更快的编译速度(模块文件只编译一次)
- 更好的封装性(接口与实现分离)
- 避免宏污染和头文件包含顺序问题
// math.cppm (模块接口单元)
export module math;
export int add(int a, int b) {
return a + b;
}
export struct Point {
int x, y;
};
// main.cpp
import math; // 导入模块
int main() {
Point p{1, 2};
return add(p.x, p.y); // 3
}
模块分区(Module Partitions):export module math:detail;可实现内部模块拆分。
注意:编译器支持尚不统一(GCC 14+、Clang 17+、MSVC 2022+已支持)。