news 2026/6/25 6:51:26

如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南

如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南

前言

现代C++提出了一个非常breakthrough的特性,就是模块,尽管有一些时间的发展了(这个玩意是C++20出的),目前在一些demo case中,VS对模块的支持还OK。笔者也计划试一试逐步开始尝试向自己的一些玩具项目引入module来化简自己工程的依赖处理关系。


为什么要用模块

C++ 模块(C++20)是为了替代传统头文件的一种编译单位机制,在之前,我们如果一个源文件发生更改,这个源文件都需要被全部重新编译,但是模块的增量编译分析到了二进制ABI层次,MSVC的模块(是的,跟其他编译器的厂商实际上不太互通)通过模块二进制接口/BMI 缓存编译产物,而且,这一次的导出更加的健壮,之后我们会介绍两个关键字来告诉你模块的导入和导出是如何工作的。


先决条件

现在VS2022开始下不到了(至少不太好搞到),这就是为什么笔者采用VS2026了。要在 VS2026 上顺利使用模块,请确认以下项目:

  1. Visual Studio 2026(或更新)已安装,并包含 “Desktop development with C++” 工作负载。VS2026 附带 MSVC Build Tools v14.50(IDE 18.0),对模块和语言兼容性有进一步改进。所以现在可以说没啥负担,不用单独开启什么实验特性了,早入正了。
  2. C++ 标准设置:项目或命令行使用/std:c++20或更保守地/std:c++latest(VS2026 的 MSVC 提供对模块的更完整支持)。不过别担心,VS2026默认就是上面的选项,不用改,你怕的话就看一眼就好了

最小可运行示例(代码与逐步说明)

创建一个小工程vs2026-modules-demo/,包含两个文件:

math.ixx(模块接口单元):

exportmodule math;exportintadd(inta,intb){returna+b;}exportstructPoint{intx,y;};

main.cpp(使用模块):

import std;import math;intmain(){std::print("Add Result: {}",add(1,2));Point p{1,2};std::print("Point p ({}, {})\n",p.x,p.y);return0;}

说明:MSVC 社区中.ixx是常见的模块接口扩展名;你也可以使用.cppm等,但 IDE/工具链对扩展名的默认识别可能不同。


在 Visual Studio IDE(VS2026)中使用模块 — 步骤

Visual Studio 已把大部分模块构建细节交给 MSBuild/IDE 去管理,你通常只需把文件加入项目:

  1. 新建项目Console App (C++)(选择 Desktop development with C++ workload)。
  2. 把模块文件加入项目:右键项目 → Add → Existing Item → 添加math.ixxmain.cpp
  3. 确认语言设置:右键项目 → Properties → C/C++ → Language →C++ Language Standard选择ISO C++20或者是以上( 选择Preview也是可以的),同时,还要再 Properties → C/C++ → Language中开启将生成C++23的标准库模块选择为是
  4. 构建并运行:IDE 会自动对模块源进行扫描、生成 BMI、并正确设置编译与链接次序;你通常不需要手动指定.obj。如果模块间依赖复杂(跨项目),可以使用项目引用或在 Project Properties 中配置 Module References。

Reference

  • C++ 中的命名模块教程 | Microsoft Learn
  • 教程:使用命令行中的模块导入标准库 (STL)(C++) | Microsoft Learn
  • Standard C++20 Modules support with MSVC in Visual Studio 2019 version 16.8 - C++ Team Blog
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 21:02:31

Qwen3-8B-AWQ:双模式切换引领轻量级大模型效率革命

Qwen3-8B-AWQ:双模式切换引领轻量级大模型效率革命 【免费下载链接】Qwen3-8B-AWQ 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-8B-AWQ 导语 阿里通义千问Qwen3-8B-AWQ模型凭借单模型双模切换技术与4位量化优化,重新定义了轻量级大…

作者头像 李华
网站建设 2026/6/25 15:53:25

22、深入理解命令行处理机制与高级技巧

深入理解命令行处理机制与高级技巧 1. 命令行处理步骤详解 命令行处理涉及一系列步骤,以 ls -l $(type -path cc) ~alice/.*$(($$%1000)) 为例: 1. 将 ls -l 替代其别名 “ll”,之后 shell 重复步骤 1 到 3,步骤 2 会将 ls -l 拆分为两个单词。 2. 该命令无特殊操…

作者头像 李华
网站建设 2026/6/25 2:57:42

23、UNIX 进程处理:从基础到高级操作

UNIX 进程处理:从基础到高级操作 1. UNIX 进程处理概述 UNIX 操作系统以其简洁而强大的概念闻名于世,如标准输入输出、管道、文本过滤工具和树形文件系统等。此外,UNIX 还是首个让用户能够控制多个进程的小型计算机操作系统,这种能力被称为用户控制的多任务处理。 在 ba…

作者头像 李华
网站建设 2026/6/24 21:13:14

如何通过Apache Flink构建99.99%可靠性的实时数据处理系统?

如何通过Apache Flink构建99.99%可靠性的实时数据处理系统? 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 在实时数据处理领域,数据一致性和状态管理一直是开发者面临的核心挑战。Apache Flink凭借其精确一次&…

作者头像 李华
网站建设 2026/6/23 20:37:23

27、深入探索Bash脚本调试器

深入探索Bash脚本调试器 1. 调试变量简介 Bash 3.0引入了一些实用的环境变量,以辅助编写调试器。这些变量包括: - BASH_SOURCE :一个数组,包含当前正在执行的文件名。 - BASH_LINENO :一个数组,对应已进行的函数调用的行号。 - BASH_ARGC 和 BASH_ARGV :前…

作者头像 李华
网站建设 2026/6/24 9:07:27

GLM-4.5:重新定义智能体时代的AI基础设施

GLM-4.5:重新定义智能体时代的AI基础设施 【免费下载链接】GLM-4.5 GLM-4.5拥有3550亿总参数和320亿活跃参数,而GLM-4.5-Air采用更紧凑的设计,总参数为1060亿,活跃参数为120亿。GLM-4.5模型统一了推理、编程和智能体能力&#xff…

作者头像 李华