I wonder why this C++ code is valid and doesn't cause any errors:
extern int B;
int A = B;
int B = A;
int main()
{
printf("%d\n", B);
system("pause");
return 0;
}
First, the variable A
will be created in some memory address, then its value will be initialized from variable B
, but then variable B
goes back to initialize its value from variable A
, and so on, ...
So, why is there no infinity loop or any error here?
The program still runs ok, and the value of B
is 0
This is valid for Java as well:
class A {
static final int AA = B.BB;
}
class B {
static final int BB = A.AA;
}
Any one can explain these questions for me, thanks!
I am answering this for C++. Although the story might not be all that different for Java
It is not an infinite loop because everything is resolved at compile time, and here is how:
B
is declared as extern
A
has to be set to the value of whatever B
is supposed to be when it is declared, so setting the value of A
is delayed until much laterB
is finally declared but since it is not assigned a value, it gets a default value of 0
.A
and can now set it to 0
as well.0
See this answer for more details