是否有技术原因导致枚举器不是文字?

Enr*_*lis 1 c++ enums literals language-lawyer c++20

我认为an 的枚举enum [class]数是文字,因为根据我的理解,它们代表了代表 for 、for和for 的enum [class]东西。然而,它们不是,因为标准只列出了这些文字,1inttruebool"hello"char const*

literal:
    integer-literal
    character-literal
    floating-point-literal
    string-literal
    boolean-literal
    pointer-literal
    user-defined-literal
Run Code Online (Sandbox Code Playgroud)

而字面量一词根本不会出现在[dccl.enum]中。

标准不将枚举数分类为其所属枚举类型的文字是否有原因?

Nic*_*las 11

是否有技术原因导致枚举器不是文字?

您会注意到术语“文字”是在 C++ 标准章节“词法约定”中定义的。这里的“词法”指的是词法分析,它获取一个字符序列并生成一个标记序列。然后对这些标记进行语法处理。

C++ 定义了各种类型的标记。其中包括关键字、运算符、标点符号、标识符和 yes 文字。但这只是字面意思:一种令牌。字符序列的词法分析的分类。

枚举器不是字符词法分析的产物;而是字符的词法分析的产物。它是一系列标记的语法分析的产物。考虑以下文本序列:name1::name2。从词法上讲,您知道这是什么:它是一个标识符,后跟::运算符,然后是标识符。

然而从语法上来说……你不知道。也许name1指定一个类并且name2是该类的成员。Maybename1是一个命名空间并且name2是该命名空间的成员。或者...也许name1是一个枚举,并且name2是该枚举中的一个枚举器。

你无法仅从孤立的文本序列中得知。语法是上下文的问题,没有上下文,你所拥有的只是一堆标记。

枚举数不能是文字,因为确定什么是或不是枚举数是在确定什么是或不是文字之后发生的过程的产物。