下面的 C# 代码被愉快地接受了,我相信在 Java 中也是如此,而 C++ 编译器会拒绝等价,因为 Foo 在声明之前使用:
class Program
{
static void Main(string[] args)
{
Foo foo;
}
}
class Foo
{
int x;
}
这在语法和解析方面是如何工作的?具体来说,当编译器看到第一次出现的 Foo 时,它如何知道将其解析为声明而不是其他内容?它是通过两个标识符的并置,还是其他一些规则?