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中对模块中函数和命名空间的智能感知是有问题的,只对使用的函数和命名空间中的函数有再次提示。奇怪的是,如果是类又是正常的。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部