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

Rak*_*111 10 c++ declaration definition c++11

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

struct Magic {};
int main() {
  int; // well-formed
  Magic; // well-formed
}
Run Code Online (Sandbox Code Playgroud)

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

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

Vla*_*cow 14

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

5在一个简单声明中,只有在声明一个类(第9节)或枚举(7.2)时,也就是说,当decl-specifier-seq包含一个 类说明符时,可以省略可选的init-declarator-list.elaborated-type-specifier,带有类键(9.1)或枚举说明符 ....

因此这段代码

int main() {
  int; // well-formed
  Magic; // well-formed
}
Run Code Online (Sandbox Code Playgroud)

是不正确的.

此外,这些形式错误的声明在形式上是根据3.1声明和定义第2节的定义,显然这样做是没有意义的.

  • 好一个.有趣的是,大多数人只是相信OP并且没有尝试使用适当的标志来编译代码. (3认同)