在阅读标准时,我真的很惊讶地看到,实际上,名称在声明中是可选的:
struct Magic {};
int main() {
int; // well-formed
Magic; // well-formed
}
对于那些有兴趣阅读标准的人来说,这是因为在简单声明中, init-declarator-list 是可选的。这是一个demo。
所以我真的想知道为什么这是允许的。我为什么要这么做?这对我来说毫无意义。我的理由是,因为如果没有意义,为什么要允许呢?
答案 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段的定义,显然这样做是没有意义的。