为什么是标准C++;定义Decl说明符Seq可选 为什么在标准C++语法中, DECL指定符SEQ < 简单声明< /C> >是可选的?
为什么是标准C++;定义Decl说明符Seq可选 为什么在标准C++语法中, DECL指定符SEQ < 简单声明< /C> >是可选的?,c++,grammar,C++,Grammar,simple-declaration: decl-specifier-seq(optional) init-declarator-list(optional); 根据规范,只有构造函数、析构函数和类型转换函数不能有decl说明符seq(第9.2节或第7节dcl.dcl)。但所有这3个函数声明都是一个类的成员,因此它们应该由另一个语法规则定义,该规则与简单声明分开: member-declaration: decl-specifier-seq(optional) member-declar
simple-declaration:
decl-specifier-seq(optional) init-declarator-list(optional);
根据规范,只有构造函数、析构函数和类型转换函数不能有decl说明符seq
(第9.2节或第7节dcl.dcl)。但所有这3个函数声明都是一个类的成员,因此它们应该由另一个语法规则定义,该规则与简单声明
分开:
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说明符seq
是可选的。但是为什么在简单声明中,它也是可选的呢?语法没有为编译器编写者的方便而优化。我想你可以跳过最后一个注释。国际海事组织提出的一个更好的问题是,当前规范背后的技术原因是什么,如果不是这样,可能会产生什么后果。现在听起来你在征求意见,因为你有不同的观点。C++语法不是用来包括一切,而是为了正确的程序而工作。有很多“程序”适合语法,但实际上是无效的C++,因为C++不是上下文无关的,而且语义也很多。还要注意,即使你只是写一个简单的解析器。然后,解析所有C++,你就必须已经有了一个编译器,因为你至少需要一个结构/类的内存模型来正确解析C++。我们可以通过简单地遵循标准C++语法来构造一个相当原始但工作的解析器,只要我们将解析限制到语言的一个很小的子集,那就是我想要的。e、 g.已知为有效cpp代码(已由其他完整编译器正确编译)且标识符名称已知(通过使用其他编译工具获得)的src文件