gpt4 book ai didi

C++ 导入关键字、模块关键字和导出关键字

转载 作者:行者123 更新时间:2023-12-02 02:30:54 38 4
gpt4 key购买 nike

简介

在 C++ 标准草案中:

其中提到了这些术语导入关键字模块关键字导出关键字

困惑

在语法部分,我不太确定怎么可能按照A.1 General

"the grammar described here accepts a superset of valid C++constructs."

本附录中似乎没有定义这些语法。

问题

可能被解决here :

4 In all three forms of pp-import, the import and export (if itexists) preprocessing tokens are replaced by the import-keyword andexport-keyword preprocessing tokens respectively.

但我真的不知道这在语法方面意味着什么......这是什么意思?

相关

一些相关的语法在这里(希望我可以帮助某人获得必要的信息,而不必遍历标准)。

 preprocessing-token:
header-name
import-keyword
module-keyword
export-keyword
identifier
pp-number
character-literal
user-defined-character-literal
string-literal
user-defined-string-literal
preprocessing-op-or-punc
each non-whitespace character that cannot be one of the above
 keyword:
any identifier listed in Table 5
import-keyword
module-keyword
export-keyword
module-import-declaration:
import-keyword module-name attribute-specifier-seqopt ;
import-keyword module-partition attribute-specifier-seqopt ;
import-keyword header-name attribute-specifier-seqopt ;
control-line:
# include pp-tokens new-line pp-import
# define identifier replacement-list new-line
# define identifier lparen identifier-listopt ) replacement-list new-line
# define identifier lparen ... ) replacement-list new-line
pp-import:
exportopt import header-name pp-tokensopt ; new-line
exportopt import header-name-tokens pp-tokensopt ; new-line
exportopt import pp-tokens ; new-line

最佳答案

你已经拥有了所有的部分;你只是没有正确地看待它。可能是因为“关键字”这个词。

所以让我们从 pp-import 开始,它不是语法的一部分。这本身并不是真正的 C++ 语法;而是 C++ 语法。它以“pp”开头,因为它是预处理器的一部分。预处理器是在将 C++ 语法的其余部分应用于文本之前发生的事情。

因此,pp-import 是一个预处理器指令,非常类似于宏定义(module-file 及其派生物也是如此)。预处理器指令通常控制为 C++ 生成的标记序列,模块预处理器指令也不异常(exception)。

Section [cpp.import]定义 pp-import 的外观以及它生成的 token 。因此,在预处理之前,您将获得如下所示的文本序列:import "some_module.name"。当预处理器将此文本识别为 pp-import 时,它将生成标记序列import-keyword "some_module.name"

import-keyword 是特定 token 的名称,就像 ifstruct 一样。但与大多数此类标记不同,此标记没有有文本模拟。也就是说,if 是编译器在代码中看到文本“if”时生成的关键字。 import-keyword 的情况并非如此。此标记仅由 C++ 预处理器生成,并且仅由 pp-import 预处理指令生成。

因此,预处理指令 pp-import 基本上用 import-keyword 标记替换了“import”文本。主要的 C++ 语法可以识别 import-keyword 标记,即使您无法编写该标记的文本。

但是...为什么?为什么所有这些繁琐的预处理指令和关键字您都无法输入?为什么不让 importmodule 像其他关键字一样工作呢?

有两个原因。

  1. “模块”和“导入”这两个词非常经常用作标识符。通过让预处理器转换模块头和导入指令以使用非人类可写标记 module-keywordimport-keyword,“module”和“import”的任何使用“这些指令的外部允许它们只是标识符。因此,C++20 不会破坏大量代码。

    或者你宁愿写co_module;)

  2. 在模块化构建系统中,您需要一种方法来查看文件并快速了解它定义的模块以及导入的模块。而且您宁愿不必编写整个 C++ 解析器来做到这一点,更不用说花时间在整个文本上运行它(这将很困难,因为您需要导入所有这些模块才能理解它)。通过首先使用模块语句预处理器指令而不是常规的 C++ 语法,您可以简单地使用 C++ 预处理器来提取它们。

关于C++ 导入关键字、模块关键字和导出关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65047031/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com