为什么允许没有名字的声明?

时间:2018-01-10 17:06:27

标签: c++ c++11 declaration definition

在阅读标准时,我真的很惊讶地看到,实际上,名称在声明中是可选的:

struct Magic {};
int main() {
  int; // well-formed
  Magic; // well-formed
}

对于那些有兴趣阅读标准的人来说,这是因为在简单声明中, init-declarator-list 是可选的。这是一个demo

所以我真的想知道为什么这是允许的。我为什么要这么做?这对我来说毫无意义。我的理由是,因为如果没有意义,为什么要允许呢?

1 个答案:

答案 0 :(得分:14)

根据C ++标准(7声明)

  

5在 simple-declaration 中,可选的 init-declarator-list 可以是   仅在声明类(第9条)或枚举(7.2)时省略,   也就是说,当 decl-specifier-seq 包含a时    class-specifier ,带有 class-key (9.1)的详细类型说明符,   或者 enum-specifier ....

因此这段代码

int main() {
  int; // well-formed
  Magic; // well-formed
}

是不正确的。

此外,正式地说,这些形式错误的声明是根据 3.1声明和定义部分第2段的定义,显然这样做是没有意义的。