44

I've been following up C++ standardization and came across C++ modules idea. I could not find a good article on it. What exactly is it about?

4

4 回答 4

88
于 2019-11-29T00:19:12.613 回答
9

C++ 模块是允许编译器使用“语义导入”而不是旧的文本包含模型的提议。当找到#include 预处理器指令时,它们不会执行复制和粘贴,而是读取包含表示代码的抽象语法树的序列化的二进制文件。

这些语义导入避免了头文件中包含的代码的多次重新编译,从而加快了编译速度。例如,如果您的项目在不同的 .cpp 文件中包含 100#include<iostream>.cpp 文件,则每个语言配置的标头只会被解析一次,而不是每个使用该模块的翻译单元解析一次。

微软的提议超越了这一点,并引入了internal关键字。具有internal可见性的类的成员不会在模块之外看到,因此允许类实现者对类隐藏实现细节。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4465.pdf

我在我的博客中写了一个小例子<iostream>,使用 LLVM 的模块缓存: https ://cppisland.wordpress.com/2015/09/13/6/

于 2015-10-20T10:11:27.210 回答
5

请看一下我喜欢的这个简单的例子。那里的模块解释得很好。作者使用简单的术语和很好的例子来检查问题的各个方面,如文章中所述。

https://www.modernescpp.com/index.php/c-20-modules

于 2019-11-29T14:00:07.077 回答
0

这是第一个命题之一: http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1778.pdf

还有一个很好的解释: http ://clang.llvm.org/docs/Modules.html

于 2014-03-27T16:45:37.460 回答