什么是C++模块权限?

vit*_*aut 16 c++ terminology c++-modules

我在C++模块的上下文中看到了一些对"purview"这个术语的引用,例如在https://gcc.gnu.org/wiki/cxx-modules中:

Baz (); // Baz's declaration visible from purview Quux interface
Run Code Online (Sandbox Code Playgroud)

究竟什么是C++模块权限?

ein*_*ica 26

让我们将这个问题分解为三个部分:

  1. 什么是C++模块?
  2. 什么是权限?
  3. 什么是C++模块的权限?

C++模块

模块是C++的未来未来特性,目前还不是语言标准的一部分(即不在C++ 17中).简而言之,模块旨在允许您导入已解析/已编译的C++构造,而不是以文本方式将头文件预先添加到您的翻译单元(这是我们目前使用#include预处理程序指令执行的操作).大量头文本的文本包含是使C++编译变慢的部分原因; 如果我们可以编译大部分"头"代码,知道它为我们提供了什么,让编译器记住它(以"模块"的形式),我们可以告诉编译器我们使用的是某些模块中的东西而不是包括很多标题.

术语"权限"

这是一个主要用于法律语言的英语术语,这就是为什么我们很多人(不会说英语的人)从未听过它.好吧,让我们在(Merriam-Webster)字典中查找:

权限,N.:
1.
(a)法规的正文或颁布部分
(b)法规 的限度,目的或范围
2.权限,权限,责任,关注或意图的范围或界限
3.视野范围,理解或认知

所以,基本上,"X的范围"="X涵盖或包含什么".

C++模块的范围

现在让我们来看看C++模块技术规范草案(这是指定建议的模块功能).这将解释模块的权限是什么:

模块单元权限从模块声明开始,并延伸到转换单元的末尾.命名模块M的范围是M模块单元的模块单元范围的集合.

所以基本上,当你编写一个模块声明时,你从模型未涵盖的声明开始(例如来自其他地方),然后你"开始"指定模块的导出,然后列出所涵盖的声明/定义由模块.

例:

// module interface of module M
int f();
export module M;
int g();
export int h();
Run Code Online (Sandbox Code Playgroud)

所以int g()并且int h()处于"模型的范围",但事实int f()并非如此.

在这个例子中只有一个"模块单元"; 如果我们有额外的文件/翻译单位,他们之后的相关内容export module M也会在权限范围内.