C++ 为什么(类A{}fkldsjflksdjflsj;;)可以编译?

C++ 为什么(类A{}fkldsjflksdjflsj;;)可以编译?,c++,syntax,C++,Syntax,我在for循环中放置了一些错误的东西,但它似乎仍然可以编译。然后我尝试了for循环语法,似乎下面的代码是:for循环中的start条件中的类定义,带有一些像这样的无意义字符,可以编译 int main(){ for(class A{} fkldsjflksdjflsj;;) return 0; } 还有 但不是 for(class A fkldsjflksdjflsj;;) 为什么?的的第一部分可能包含变量声明。(和一些其他类型的声明)。幸运的是,这就是我们所拥有的: cla

我在for循环中放置了一些错误的东西,但它似乎仍然可以编译。然后我尝试了for循环语法,似乎下面的代码是:for循环中的start条件中的类定义,带有一些像这样的无意义字符,可以编译

int main(){
    for(class A{} fkldsjflksdjflsj;;)
    return 0;
}
还有

但不是

for(class A fkldsjflksdjflsj;;)

为什么?

的第一部分可能包含变量声明。(和一些其他类型的声明)。幸运的是,这就是我们所拥有的:

class A
{
} zzz;
声明一个变量
zzz
,其类型为
class a
,该类没有用户定义的成员


A类fkldsjflksdjflsj
失败,因为未定义
A类
。但是,如果您在前面定义了
类A
,就可以了。

您已经在for循环范围内声明了名为
fkldsjflksdjflsj
的类
A
的实例。
class A fkldsjflksdjflsj
声明失败,因为您没有指定类主体。

fkldsjflksdjflsj
不是“一些无意义的字符”。它是类型为
class a
的变量的名称,您刚才也通过语法
class a{}
声明了该变量。因此,整个过程就是一个变量声明,这正是
for
语句的第一部分所要求的。

您可以在那里编写任何简单的声明。将其作为指针将起作用
class a*a
,但这可能并不相关。
class A
{
} zzz;