C++20之模块
C++20之模块
- 语法
- 特点
- VS2019中的使用
- 缺点
语法
在模块文件中:
export module MyModule;//定义模块名
export auto MyFunc()
{
}
namespace MyName
{export auto Test1(){}
}
export class CA
{
public:CA() = default;~CA() = default;void DoIt(){}
};
在使用模块的文件中:
import MyModule;//引入该模块
然后就可以直接使用模块文件中定义的函数了。
auto TestModule()
{MyName::Test1();MyFunc();CA a;a.DoIt();}
特点
- 使用不需要include头文件,当然也没有头文件,自然也就不会有头文件中避免重复声明的宏;编译自然也更快。
- 声明实现仍然可分离
- 可以显式指定导出的类和函数,只需要加上export
- 模块之间名称可以相同不会冲突
- 预处理宏只在模块内有效
- 模块不存在引入顺序问题
VS2019中的使用
只要C++语言标准选择ISO C++20 或者latest,就能使用模块等C++20的语法。

在项目中添加新项,文件扩展名为.ixx,这个.ixx文件和.cpp其实没有本质区别,只是VS2019编译的时候会自动认为这是个模块文件。如果添加的文件不是.ixx,但是又希望编译器认为这是个模块文件,那么只需要如后图那样设置就可以了。


缺点
我现在用的版本是16.11.2,可以正常正确的编译使用模块,在16.10的时候是编译通过但链接出错。不过在这个版本的VS2019中对模块中函数和命名空间的智能感知是有问题的,只对使用的函数和命名空间中的函数有再次提示。奇怪的是,如果是类又是正常的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
