C++20 模块:现代化组件系统
学习使用import和export关键字组织代码,替代传统头文件。 · 难度:入门 · +15XP
模块概述
C++20模块是一种新的代码组织方式,旨在替代头文件。模块提供更好的封装性、更快的编译速度和更清晰的依赖关系。
基本语法
模块由模块接口单元和模块实现单元组成。
// math.ixx (模块接口单元)
export module math;
export int add(int a, int b) {
return a + b;
}
export int multiply(int a, int b); // 声明
// math.cpp (模块实现单元)
module math;
int multiply(int a, int b) {
return a * b;
}
// main.cpp
export import math; // 或 import math;
int main() {
std::cout << add(2, 3) << '
';
std::cout << multiply(4, 5) << '
';
}
模块分区
模块可以分成多个分区,便于管理大型项目。
// math.ixx
export module math;
export import :arithmetic; // 导入分区
// arithmetic.ixx (分区)
export module math:arithmetic;
export int add(int a, int b);
模块 vs. 头文件
| 特性 | 头文件 | 模块 |
|---|---|---|
| 编译速度 | 慢(重复解析) | 快(编译一次) |
| 封装 | 差(宏泄露、私有细节暴露) | 好(显式导出) |
| 依赖管理 | 手动顺序 | 自动顺序 |
注意事项
- 模块文件通常使用
.ixx或.cppm扩展名。 - 编译器支持尚不统一,需要启用特定标志(如
-std=c++20 -fmodules-ts)。
练习提示
创建一个简单的数学模块,导出add、subtract、multiply和divide函数。然后在另一个文件中导入并使用。