C++20模块是替代头文件的标准化代码组织机制,通过export/import显式控制接口暴露与实现分离,解决编译慢、宏污染、重复解析等问题。

C++20 的模块(Modules)是一种全新的、标准化的代码组织与复用机制,用来替代传统头文件(#include)机制。它从根本上解决了头文件带来的编译缓慢、宏污染、重复解析、脆弱依赖等问题,让接口声明与实现分离更干净,编译更快,语义更明确。
传统头文件本质是文本复制——#include "x.h" 把整个文件内容原样塞进当前翻译单元,导致:
模块则把“导出什么”和“怎么实现”显式分开:你用 export 明确声明对外接口,编译器生成二进制接口描述(module interface unit),其他代码通过 import 直接消费,不再文本展开。
假设你要导出一个加法函数:
立即学习“C++免费学习笔记(深入)”;
// math.mpp(模块接口单元,后缀非强制,但常用 .mpp 或 .ixx)
export module math;
export int add(int a, int b) {
return a + b;
}// main.cpp
import math;
#include <iostream>
int main() {
std::cout << add(2, 3) << '\n'; // 正常调用
}编译时需启用模块支持(如 GCC 11+/Clang 13+/MSVC 19.28+),并按顺序编译模块接口再编译导入者。关键点:
export module math; 定义模块名,必须是文件首条声明export 前缀的声明才对外可见(函数、类、模板、概念等都可导出)import math; 不是包含路径,而是按模块名查找已编译的模块接口(类似链接库名)模块不是“带 export 的头文件”。它带来的是构建模型升级:
static 变量、匿名命名空间等天然不冲突;无需 inline 或 static 修饰函数来避免 ODR 违规export module math:core; 和 export module math:extra;),再由主接口 re-export模块已是 C++20 正式特性,但落地仍需谨慎:
#include <vector></vector>),但可用 import std;(C++23 扩展,部分编译器已实验支持)基本上就这些。模块不是银弹,但它让 C++ 大型项目的可维护性和构建效率有了质的改善可能。
以上就是C++20中的模块(Modules)是什么?(替代头文件)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号