Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是标准C++;定义Decl说明符Seq可选 为什么在标准C++语法中, DECL指定符SEQ < 简单声明< /C> >是可选的?_C++_Grammar - Fatal编程技术网

为什么是标准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文件