全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

C++20 modules基础知识入门

时间:2023-06-15 11:37

人气:

作者:admin

标签: C++语言  Modules 

导读:以前一直有了解C++20的新特性,但是因为编译器对此支持的比较少,所以很少实践。...

以前一直有了解C++20的新特性,但是因为编译器对此支持的比较少,所以很少实践。

近期才知道MSVC已经全面支持了C++20的新特性,所以打算全部实践一下,最近在MSVC上跑通了modules,这里分享一下modules的使用方法(注意,以下Case仅适用于MSVC上,估计其它编译器的使用方式与此有些差异)。

那modules是什么?它有什么作用?

以前C++中想使用外部某个函数或变量需要使用#include来引用头文件,但include这种做法其实就是把文件的内容原封不动的复制过来,如果一个复杂的头文件被好多个源文件include,那整个项目的编译速度也会降低,而且很多时候也会把一些复杂的宏定义引入进来,造成宏污染等等。

而modules就是为了解决这种问题而引入的,它是一种组件思想,一个module编译一次后,它的结果会被保存在二进制文件中,一个module可以选择把什么内容暴露给外面使用,剩下的只有内部可见。其它想使用此module的模块直接使用即可,无需再次编译,可以重用。最主要的是,使用modules的项目,编译速度比include的方式快的多,记得之前看过一组测试数据(好像是哪个会议上C++之父贴出来的),modules项目的编译速度是include的25倍左右。

如果你的项目中已经使用了C++20,真的可以考虑把include方式转换为modules方式。

在MSVC中怎么使用modules?

我的编译器是VS2019,经我测试,想要VS中跑通modules需要一些前置条件,比如需要安装modules相关的环境包,可以在VS installer中安装:

9a803b54-0b2d-11ee-962d-dac502259ad0.png

其次在自己的项目中,需要把C++标准改为C++20或者C++latest:

9a84437a-0b2d-11ee-962d-dac502259ad0.png

还有一点,需要在VS中启用modules功能:

9aab523a-0b2d-11ee-962d-dac502259ad0.png

这三项都配置后,你应该就可以成功使用modules功能了。

看下我的测试用例:

9ac471ac-0b2d-11ee-962d-dac502259ad0.png

Example.ixx可以理解为是头文件,它定义了可以对外暴露的接口,后缀名是.ixx,开头以export module name表示该module的名字是name。

前面加了export的修饰的函数或类表示可以对外暴露,外部可以使用。而module :private; 后面的表示内部的东西,只有内部可见和使用,外部不能使用,比如Example.ixx中的PrivateFunc,如果外部使用,编译时就会报错。

模块接口文件的后缀名一般是.ixx,实现接口的文件后缀名和原来的C++一样,还是.cpp。

看我的Example.cpp,第一行中的module Example,表示在module Example空间,自然而然可以访问到Example module中的内容,这里你也可以看的到,里面定义了ixx中声明的接口。

那import std.core; 是什么作用?

import表示导入xxx模块,import后就可以使用对应模块的功能,比如想要使用std::cout,那就需要import std.core。

那我们以前使用的那些标准库的函数,都对应什么module?

在MSVC中是这样:

std.regex提供头文件的内容

std.filesystem提供头文件的内容

std.memory提供头文件的内容

std.threading提供了头文件、的内容

除此之外的功能都由std.core提供。

要使用某些模块,直接添加import声明即可:

import std.filesystem;
import std.core;

再看下我的main函数所在的测试文件:

9ace9178-0b2d-11ee-962d-dac502259ad0.png

想要使用Example module中export出的功能,直接import Example即可,剩下的使用方式和以前类似。

介绍到这里,大家就可以在VS中写一个modules的Demo了。





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信