0

0

C++20中Modules模块怎么用_C++解决头文件包含慢的新方案【特性】

穿越時空

穿越時空

发布时间:2026-02-15 14:54:19

|

735人浏览过

|

来源于php中文网

原创

c++20 modules 是绕过预处理的全新编译单元机制,非头文件替代品;需用 export module 定义接口单元,import 导入模块,不支持 #include 语法,编译依赖模块名而非路径,构建链路重构导致当前项目落地困难。

c++20中modules模块怎么用_c++解决头文件包含慢的新方案【特性】

C++20 Modules 不是“头文件替代品”,而是彻底绕过预处理的全新编译单元机制——它不解决“包含慢”,而是让“包含”这个动作本身消失。

怎么写一个最简 module interface unit

模块接口单元(.ixx 或 .cppm)必须以 export module 开头,且不能有 #include;导出符号用 export 显式声明:

export module math_utils;
export int add(int a, int b) { return a + b; }
export namespace math {
    export const double PI = 3.14159;
}

注意:export module 后面的名称(如 math_utils)是模块名,不是文件名;编译器靠模块名识别依赖,而非路径。

怎么在另一个文件里 import 而不是 include

使用 import 语句导入模块,它不展开文本、不触发宏、不污染全局命名空间:

立即学习C++免费学习笔记(深入)”;

FlowMuse AI
FlowMuse AI

节点式AI视觉创作引擎

下载
import math_utils;

int main() {
    auto x = add(2, 3);           // OK
    auto y = math::PI;            // OK
    // #include <iostream>  // ❌ 不再需要
    // std::cout << x;       // ❌ std 未导入
}

常见错误:

  • import 必须出现在翻译单元最前面(在任何声明、using、甚至空行之前)
  • 不能 import 普通头文件(如 import <iostream></iostream> 是非法的,除非该头文件已封装为 module)
  • 标准库模块目前仍非完全可用:MSVC 支持 import std;(需 /std:c++20 /experimental:module),GCC 13+ 仅支持 import <vector></vector> 等有限封装,Clang 尚未落地标准库 module

编译时怎么生成和使用 module interface

不同编译器模块构建流程差异极大,没有统一“头文件式”的即用方式:

  • MSVC:用 /interface 编译 .ixx 生成 .ifc 文件,再用 /reference 引入;import 语句会自动查找 .ifc
  • GCC:用 -fmodules-ts -x c++-system-header 预编译标准头为 module,或用 -fmodule-file=xxx.gcm 指定接口文件
  • Clang:需 -x c++-system-header + -fmodules + -fimplicit-modules,但 C++20 标准 module 支持仍在实验中

关键点:.ifc / .gcm 是二进制接口文件,不可编辑、不可跨编译器复用;模块缓存位置由编译器管理(如 MSVC 的 /module:cache),不是项目目录下的普通文件。

为什么你现在的项目还很难用上 Modules

Modules 不是开关一开就提速的优化项,它重构了整个构建链路:

  • 构建系统要能识别 import 依赖并调度编译顺序(CMake 3.28+ 才有 target_compile_features(... PRIVATE cxx_modules)add_module()
  • 第三方库几乎都没有提供 module interface(Boost、fmt、spdlog 全是头文件形式)
  • 调试信息、IDE 补全、静态分析工具对 module 支持滞后(VS 2022 对 module 的 IntelliSense 已较好,CLion 和 VS Code C/C++ 插件仍有限)
  • 混合使用 #includeimport 时,头文件若被 module 和非-module 文件重复包含,可能触发 ODR 违规

真正落地的模块化路径,往往从封装内部工具库开始,而不是替换 <string></string><vector></vector> —— 那些地方的瓶颈从来不在预处理,而在模板实例化和符号解析。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

730

2023.08.02

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1462

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

382

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2222

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

37

2026.01.19

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

148

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

102

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

35

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.5万人学习

C 教程
C 教程

共75课时 | 4.7万人学习

C++教程
C++教程

共115课时 | 17.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号