C++/Java递归变量初始化
我想知道为什么这个C++代码是有效的,不会造成任何错误:extern int B;
int A = B;
int B = A;
int main()
{
printf("%d\n", B);
system("pause");
return 0;
}
首先,变量A
将在某个内存地址中创建,然后它的值将从变量B
初始化,但随后变量B
返回以从变量A
初始化它的值,依此类推
那么,为什么这里没有无限循环或任何错误呢
程序仍然运行正常,B
的值为0
这对Java也是有效的:
class A {
static final int AA = B.BB;
}
class B {
static final int BB = A.AA;
}
任何人都可以为我解释这些问题,谢谢
# 1 楼答案
我认为这或许可以解释这个问题:
A.AA用值0初始化
A.AA寻找B.BB
B.BB用值0初始化
B.BB寻找A.AA
此时A.AA的值已经为零(int的默认值),因此B.BB变为0
A.AA变为0
# 2 楼答案
它不是一个无限循环,因为所有问题都是在编译时解决的,下面是如何解决的:
B
被声明为extern
A
必须设置为声明时B
应该是的值,因此设置A
的值要延迟很久B
最终被声明,但由于没有给它赋值,它会得到一个默认值0
李>A
的值,现在也可以将其设置为0
李>0
有关更多详细信息,请参见此answer