什么是C ++模块权限?

时间:2018-03-10 00:39:37

标签: c++ terminology c++-modules

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

Baz (); // Baz's declaration visible from purview Quux interface

C ++模块的范围究竟是什么?

1 个答案:

答案 0 :(得分:26)

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

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

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

    术语"权限"

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

      

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

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

    C ++模块的范围

    现在让我们看看C++ Modules Technical Specification draft(这是指定建议的模块功能)。这将解释模块的权限是什么:

      

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

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

    示例:

    // module interface of module M
    int f();
    export module M;
    int g();
    export int h();
    

    所以int g()int h()位于"模型的权限范围内#34;但int f()不是。

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