java - C++/Java递归变量初始化

标签 java c++ variables global-variables extern

我想知道为什么这段 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;
}

谁能帮我解释一下这些问题,谢谢!

最佳答案

因为我对c++不熟悉,所以只能用java的例子给大家解释一下。

我认为这可以解释问题:

class A {
    static final int AA = B.BB;
}

class B {
    static final int BB = A.AA;
}
  • A.AA 初始化为 0

  • A.AA 寻找 B.BB

  • B.BB 初始化为 0

  • B.BB 寻找 A.AA

  • 此时A.AA已经是零值(int的默认值),所以B.BB变为0。

  • A.AA 变为 0

关于java - C++/Java递归变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40481281/

相关文章:

java - Spark Streaming数据放入HBase的问题

c++ - 在左值和右值情况下重载下标运算符 "[ ]"

c++ - Win32 API : User Impersonation technique to run a process as some other user?

c - 两个决策变量的最小值

php - htaccess 命令只允许来自同一服务器的请求(不指定 IP)

java - 在 linux 脚本中运行远程 java 服务器

java - 运行 mvn Integration-test 不会运行 robotsframework 测试用例

java - 图形 2d 形状的 Action 处理程序?

c++ - 在 DLL 中使用 fstream 读取文件的问题

angularjs - 有没有办法在 View 中重命名 Angular 变量?