在类中声明的静态变量,其类型与类的类型相同
static variables declared in a class whose type is same as that of the class
我知道为什么这是c++中的错误。
class A
{
A b;
};
int main() {}
因为type of b is unresolved at the compile time
。那么为什么下面的代码是正确的??
class A
{
static A b;
}
int main() {}
如果变量b是静态的,它的类型解决了吗??
最后,令我惊讶的是,下面的代码在JAVA中工作:
public class Main
{
Main g;
public static void main(String[] args)
{
System.out.println("hi");
}
}
为什么会这样?我知道静态变量是特定于类而不是实例的。但这并没有给出上面问题....的答案
因为:
static A b;
(在类本身中)不是定义,因此完整没有必要定义类。
Java有不同的规则,并且没有an的概念不完整的类型。当然,Java中的变量永远不会用户定义的对象类型,但引用(更像c++)指针)指向对象类型。在c++中相当于你的变量Java中的声明将是Main* g;
。
因为b的类型在编译时无法解析。
不,这是因为b
的类型在该点不完全。可以声明不完全类型的变量,但不能定义。定义分配存储对象的空间,因此必须知道对象的大小。
静态成员声明只是一个声明;如果使用该变量,则必须在其他地方定义该变量。所以在类中声明它是可以的。
非静态成员声明也是定义;它为类中的变量分配空间,因此类型必须是完整的。(另外,非空对象在逻辑上不可能包含相同类型的对象)。
Java没有不完全类型的概念,允许任何类包含(对)任何其他类的引用。
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?