-1

これが C++ のエラーである理由はわかっています。

class A
{
     A b;
};
int main() {}

なぜなら、type of b is unresolved at the compile time. それでは、なぜ以下のコードは正しいのでしょうか??

class A
{
     static A b;
}
int main() {}

変数 b の型は static だと解決されますか??

最後に驚いたことに、次のコードが Java で機能していました。

public class Main
{
Main g;
public static void main(String[] args)
{
    System.out.println("hi");
}
}

どうしてこんなことに?インスタンスではなくクラスに固有の静的変数について知っています。しかし、それは上記の質問に対する答えを与えません....私にいくつかの光を投げてください.

4

2 に答える 2

6

なぜなら:

static A b;

(クラス自体の) は定義ではないため、クラスの完全な定義は必要ありません。

Java にはさまざまな規則があり、不完全型の概念はありません。もちろん、Java の変数はユーザー定義のオブジェクト型ではなく、オブジェクト型への参照 (C++ ポインターに似ています) です。C++ で Java の変数宣言に相当するものは、Main* g;.

于 2013-05-13T11:06:21.750 に答える