C及C++之前一直是通过头文件的方式引入定义于其他文件中的标示符,而引入头文件,从本质上说相当于预处理器将头文件的内容拷贝了一份放入当前文件中,这样做有以下几个缺点:
1.由于拷贝了一份代码,而不是只包含要使用的部分,编译起来比较低效
2.如果在头文件A中引入另一个头文件B,那么其他引入头文件A的地方则自动包含了头文件B
3.引入不同头文件中定义的相同标示符时会产生冲突,无法做到隔离
C++20中引入了模块的概念,可以用更好的方式引入标示符。
1.导出模块
可以通过在cpp文件中export module 模块名;的方式导出一个模块
//ex_test.cpp
module;
#include <iostream>
export module ex_test;using namespace std;export void test1()
{cout<<"this is test1"<<endl;
}export{void test2(){cout<<"this is test2"<<endl;}
};
导出模块中的符号有两种方式,像test1这样直接使用export导出,或者像test2这样将需要导出的符号集中通过一个export进行导出。
2.导入模块
使用import 模块名;进行模块导入