nit*_*712 -2 c++ java static class
我知道为什么这是C++中的错误.
class A
{
A b;
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
因为type of b is unresolved at the compile time.那么为什么下面的代码是正确的?
class A
{
static A b;
}
int main() {}
Run Code Online (Sandbox Code Playgroud)
如果它是静态的,变量b的类型是否已被解析?
最后,令我惊讶的是以下代码适用于JAVA:
public class Main
{
Main g;
public static void main(String[] args)
{
System.out.println("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我知道它们特定于类而不是实例的静态变量.但这并没有给出上述问题的答案......请给我一些启示.
因为 b 的类型在编译时未解析。
不,这是因为类型b是不完整的,在这一点上。您可以声明一个不完整类型的变量,但不能定义一个。定义分配空间来存储对象,为此必须知道对象的大小。
静态成员声明只是一个声明;如果使用该变量,则必须在其他地方定义该变量。所以在类中声明是可以的。
非静态成员声明也是一个定义;它为类中的变量分配空间,为此类型必须是完整的。(此外,非空对象在逻辑上不可能包含相同类型的对象)。
Java 没有不完整类型的概念,并且允许任何类包含(引用)任何其他类。
因为:
static A b;
Run Code Online (Sandbox Code Playgroud)
(在类本身中)不是定义,因此不需要完整的类定义.
Java有不同的规则,并且没有不完整类型的概念.当然,Java中的变量永远不是用户定义的对象类型,而是对象类型的引用(更像是C++指针).C++中的等价物与Java中的变量声明相同Main* g;.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |