Blu*_*une 7 c++ c++20 c++-modules
假设我们有模块接口源文件 foo.ixx,其中定义了模块 foo。我们用
import foo;
Run Code Online (Sandbox Code Playgroud)
在许多不同的 cpp 文件中。与传统头文件 foo.h 包含在许多不同的 cpp 文件中的情况相比,编译时间会减少吗?如果编译时间减少了,为什么会这样?
是的,模块的优点之一就是可以减少编译时间。为了进行比较,今天的做法如下:
// foo.hpp
// some code
Run Code Online (Sandbox Code Playgroud)
// a.cpp
#include "foo.hpp"
Run Code Online (Sandbox Code Playgroud)
// b.cpp
#include "foo.hpp"
Run Code Online (Sandbox Code Playgroud)
现在,当两个翻译单元a.cpp和b.cpp被编译时,some code被文本地包含到这些源文件中,因此some code被编译两次。虽然链接器会注意最终的可执行文件中实际上只有一个定义,但编译器仍然必须编译some code两次,这是浪费精力。
有了模块,我们就会有这样的东西:
// foo.hpp
export module foo;
// some code
Run Code Online (Sandbox Code Playgroud)
// a.cpp
import foo;
Run Code Online (Sandbox Code Playgroud)
// b.cpp
import foo;
Run Code Online (Sandbox Code Playgroud)
现在编译过程不同了;有一个中间阶段,foo.hpp编译成a.cpp、 和可以使用的格式b.cpp,这意味着实现文件不需要编译some code,可以some code直接使用 中的定义。
这意味着foo.hpp只需要编译一次,这可能会导致编译时间潜在大幅减少,特别是当消耗模块接口单元的实现文件数量增加时。
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |