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

why for(class A{} fkldsjflksdjflsj;;) can compile?

我在 for 循环中放置了一些错误,但它似乎仍然可以编译。然后我尝试了for循环语法,似乎是下面的代码:一个class定义在for循环的开始条件里面,加上一些像这样的无意义的字符,可以编译。

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

还有。

for(class A;;)
for(class A{};;)

但不是。

for(class A fkldsjflksdjflsj;;)

为什么?

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

class A
{
} zzz;

声明了一个类型为class A的变量zzz,它是一个没有用户定义成员的class。

class A fkldsjflksdjflsj 失败,因为 class A 未定义。但是如果你早点定义了class A就好了。

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

fkldsjflksdjflsj 不是 'some meaningless characters'。它是您刚刚通过语法 class A {} 声明的 class A 类型变量的名称。所以整个事情是一个变量声明,这正是 for 语句的第一部分所需要的。