为什么在这段 C++ 代码中 i == 0 的值是?

Why is the value of i == 0 in this C++ code?

我对以下代码感到困惑:

#include <iostream>

int i = 1;
int main()
{
    int i = i;
    std::cout << "i: " << i << "\n";
    return 0;
}

输出:

i: 0

我曾预计 运行 上面的代码会打印 1。有人可以解释这种奇怪行为的原因吗?

您正在用自身初始化 iint i = i; 中的两个 i 都是内部的而不是外部的。这是未定义的行为,您可能会0任何事情都可能发生。

如果你想将外部 i 分配给内部 i,这是正确的方法。

#include <iostream>

int i = 1;
int main()
{
    int i = ::i;
    std::cout << "i: " << i << "\n";
    return 0;
}

Live Demo


顺便说一句,您应该仔细阅读所有编译器警告。如果你这样做了,你自己就能看到问题所在:

warning 'i' is used uninitialized in this function