当前位置: 首页 > news >正文

C++中的Modules 之一

简单来说,C++ Modules(模块) 是 C++20 标准引入的一项重大变革,旨在取代拥有 40 多年历史的 #include 预处理机制。

如果你曾经被漫长的编译时间或者复杂的头文件冲突折磨过,那么 Modules 就是为你准备的救星。


什么是 Modules?

在 C++20 之前,我们只能通过 #include 将一个文件的内容“暴力复制”到另一个文件中。而 Module 是一种全新的源码组织方式,它将代码逻辑封装在独立的单元中。

  • 关键字:使用 export module 定义模块,使用 import 引入模块。
  • 二进制格式:模块会被编译成一种中间二进制格式(类似 .ifc 或 .pcm),编译器可以直接读取,而不需要像头文件那样每次都重新解析。

为什么要引入 Modules?(痛点分析)

1. 彻底解决“编译慢”的问题

传统的 #include文本替换。如果你在 100 个源文件中引入了 <vector>,编译器就要把几万行代码重复解析 100 次。

  • Modules 方案:模块只会被编译一次。当你 import 时,编译器直接加载编译好的二进制表示,速度提升通常是数量级的。

2. 告别“宏污染”和符号冲突

头文件是“透明”的,里面定义的宏(#define)会渗透到包含它的所有地方,经常引发稀奇古怪的命名冲突。

  • Modules 方案:模块具有隔离性。除非你显式 export,否则模块内部的宏和私有变量不会影响外部。

3. 摆脱头文件卫士(Include Guards)

你再也不用写这些冗余的代码了:

#ifndef MY_HEADER_H
#define MY_HEADER_H
// ... 代码 ...
#endif

模块天然就只会被处理一次,逻辑非常清晰。


对比:旧方式 vs 新方式

过去:Header Files

// my_module.h
#pragma once
void hello();// main.cpp
#include "my_module.h"
int main() { hello(); }

现在:Modules

// my_module.ixx (或 .cppm)
export module Greeting; // 定义模块名export void hello() {    // 显式导出函数// 逻辑
}// main.cpp
import Greeting;         // 导入模块
int main() { hello(); }

现状提示

虽然 Modules 已经写入标准,但在 2026 年的今天,虽然主流编译器(MSVC, GCC, Clang)都已支持,但构建工具(如 CMake)和大型旧项目的迁移仍在完善中。如果你正在开发新项目,非常建议尝试。

http://www.jsqmd.com/news/415565/

相关文章:

  • 2026年 DeepSeek 推广服务商盘点:AI时代B2B获客新路径解析 - 品牌2025
  • 用ChatGPT写论文后如何降AI率?从写作到通过检测的完整流程 - 我要发一区
  • 降AI率工具哪个好?嘎嘎降vs比话vs去AIGC横向测评【2026最新】 - 我要发一区
  • C++中的Modules 之二
  • 毕业论文AIGC检测一次性通过指南:3款工具+4个技巧【2026实用版】 - 我要发一区
  • 2026年2月食品冷库安装厂家,卫生级标准专业制造企业推荐 - 品牌鉴赏师
  • 2026维普降AI率工具推荐TOP5:实测通过率最高的AIGC降重方案 - 我要发一区
  • 豆包没有广告入口?企业如何通过内容策略实现品牌曝光 - 品牌2025
  • 论文AI率太高怎么办?5个亲测有效的解决方案,最快10分钟搞定 - 我要发一区
  • C++中的ADL 之十二
  • 盘点2026年8款免费降AI率工具合集:亲测有效的降AIGC神器推荐【建议收藏】 - 我要发一区
  • 如何在豆包中实现品牌曝光?GEO内容优化实操指南 - 品牌2025
  • 26.2.13
  • C++中的友元 之十一
  • 2026质量好的大型钢结构雨棚评测,看看哪家值得选,轻钢雨棚/上海钢结构屋面更换 /钢结构屋顶,雨棚企业怎么选择 - 品牌推荐师
  • 做豆包广告需要哪些具体步骤? - 品牌2025
  • 前缀和———最大子数组和
  • C++中的友元 之十
  • AI时代,单片机从业者还有未来吗?应该何去何从?
  • AI模型跑云端已经过时了!单片机上本地运行大模型的3大碾压优势
  • 工作总结-做好详细设计
  • G - 221 Subsequence
  • C++中的友元 之九
  • Educational Codeforces Round 187 个人题解
  • 进程间通信选择
  • 对于本地存储和分布式存储的看法
  • 我对mysql的一些理解
  • C++中的友元 之八
  • 2026Q1石家庄别墅装修综合排名TOP10(绿色智能版靠谱实测推荐) - 品牌智鉴榜
  • greenplum安装部署-CentOS7.9