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

ggr*_*grr 3 c++ syntax

我在for循环中放错了,但它似乎仍然可以编译.然后我尝试了for循环语法,它看起来像下面的代码:for循环中的一个类定义,在for循环中有一些像这样无意义的字符,可以编译.

int main(){
    for(class A{} fkldsjflksdjflsj;;)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

也.

for(class A;;)
for(class A{};;)
Run Code Online (Sandbox Code Playgroud)

但不是.

for(class A fkldsjflksdjflsj;;)
Run Code Online (Sandbox Code Playgroud)

为什么?

M.M*_*M.M 8

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

class A
{
} zzz;
Run Code Online (Sandbox Code Playgroud)

声明一个变量,zzz其类型是class A没有用户定义成员的类.

class A fkldsjflksdjflsj失败,因为class A没有定义.但如果您之前已定义,那就没关系class A.