下面你会在[class]/1中找到语法生成 class-head 的定义:
类头:
class-key attribute-specifier-seq opt class-head-name class-virt-specifier opt base-clause opt
class-key attribute-specifier-seq opt 基子句<子>选择子> 的
在段落的末尾,您会找到以下内容:
class-specifier ,其 class-head 省略了 class-head-name 定义一个未命名的类。 [注意:一个未命名的类因此不能 的最终即可。 - 后注]
从上面我收集的是,一个命名类的语法,即一个带有 class-head-name 的类,由上面的第一个定义给出,而未命名的语法class由第二个定义给出。
一个简单的问题:不可能用第一个替换上面的两个定义,只需用 class-head-name 替换 class-head-name opt 在里面?
或者更清楚。以下是 class-head 替换上面的定义吗?
类头:
class-key attribute-specifier-seq opt class-head-name opt class-virt-specifier opt base -clause <子>选择子> 的
答案 0 :(得分:5)
没有。如果你这样做,那就会有歧义。 class final
可以表示名为final
的命名类或使用final
作为虚拟说明符的未命名类。
由于语法的定义方式,class final
总是意味着一个名为final
的类。语法是明确的。括号内的符号不是规范性文本;它只是解释了两个定义的原因。
现在,您可以通过添加另一个术语以不同的方式定义语法以实现相同的效果:
类头:
class-key attribute-specifier-seq opt class-head-name-stuff opt base-clause opt
类头名-东西:
class-head-name class-virt-specifier opt
答案 1 :(得分:0)
你无法做到
类头:
class-key attribute-specifier-seq opt class-head-name opt class-virt-specifier opt base-clause 选择子> 的
,因为那样会让 class-head 成为
原件不允许class-key class-virt-specifier
。
答案 2 :(得分:0)
不,因为这样就可以省略 class-head-name ,同时仍然指定 class-virt-specifier 。
class-virt-specifier 的语法是:
类的virt说明符:
最终
正如您所提到的,未命名的课程不能最终。