次の C# コードは喜んで受け入れられます。Java でも同じことが当てはまると思いますが、C++ コンパイラは、宣言される前に Foo が使用されるため、同等のコードを無視します。
class Program
{
static void Main(string[] args)
{
Foo foo;
}
}
class Foo
{
int x;
}
これは、構文と解析の観点からどのように機能しますか? 具体的には、コンパイラが Foo の最初の出現を確認したとき、それを他のものではなく宣言として解析することをどのように判断するのでしょうか? 2 つの ID を並置するか、それとも他の規則に従うか。