为什么在标准c ++语法中,decl-specifier-seq
下的simple-declaration
是可选的?
simple-declaration:
decl-specifier-seq(optional) init-declarator-list(optional);
根据规范,只有构造函数,析构函数和类型转换函数才能没有decl-specifier-seq
(第9.2节或第7节dcl.dcl)。但是所有这三个函数声明都是一个类的成员,因此它们应该由与simple-declaration
分开的另一个语法规则定义:
member-declaration:
decl-specifier-seq(optional) member-declarator-list(optional);
function-definition ;(optional)
::(optional) nested-name-specifier template(optional) unqualified-id ;
using-declaration
static_assert-declaration
template-declaration
此处decl-specifier-seq
是预期的可选项。但是为什么在simple-declaration
中,它也是可选的?