C 语法生产:班级

C++ Grammar production: class-head

本文关键字:班级 语法      更新时间:2023-10-16

下面您会在[class]/1:

中找到语法生产的定义 class-head

class-head:
   class-key属性seq opt class-head-name 类virt专业人士 opt base-clause opt
   class-key属性seqifier-seq opt base-clause opt

在段落的末尾,您会发现以下内容:

a 类别 class-head 省略了 class-head-name 定义一个不愿透露姓名的课程。[注意:一个未命名的课程不能 最终。 - 末尾注]

从上面我收集到一个指定类的语法,即带有a class-head-name 的类,由上面的第一个定义给出,而语法则是未命名的语法类由第二个定义给出。

一个简单的问题:不可能通过 class-head-name 将上述两个定义替换为第一个定义 在其中?

或更清楚。对于以下内容,无法替换上述 class-head 的定义?

class-head:
   class-key属性seqifier-seq opt class-head-name opt class-virt-virt-specifier opt opt opt base-clause opt

no。如果您这样做了,那么会有歧义。class final可能意味着一个名为final的命名类或使用final作为虚拟规范的未命名类。

由于语法的定义是如何定义的,因此 class final 始终表示 一个名为 final的类。语法是明确的。包围的符号不是规范文本。它简单地解释了两个定义的原因

现在,您可以通过添加另一个术语来定义语法以实现相同效果的不同方法:

类头:

   class-key属性specifier-seq opt class-head-name-stuff opt opt base-clause opt opt

class-head-name-stuff:

   class-name class-virt-name-virt-specifier opt

你不能做

class-head:
class-key属性 - 属性 - seq opt class-head-name opt class-virt-specifier opt opt base-clause opt

,因为那将允许 class-head

class-key class-virt-depcifier

原始的。

no,因为那时可能会忽略 class-head-name ,同时仍指定 class-virt-name-name

class-virt-dexifier的语法是:

class-virt-specifier
   final

,正如您提到的,未命名的类不能是 final