为什么在 C++ 中整数的默认初始化值为 4200187?

Why the defaultly initialized value of an integer is 4200187 in C++?

来自《C++ 入门》2.2.1 变量定义,“在任何函数体之外定义的变量都被初始化为零”。但是,像下面的代码,我定义了一个整数 i 并打印出来。为什么结果是 4200187? (我用的是Clion)

更新:感谢您的解答!现在我知道我是在主函数内部定义的,然后我没有定义。但为什么未定义的整数的值为 os 4200187?

#include <iostream>

int main() {
    int i;
    std::cout << i << std::endl;
}

结果:

4200187

Process finished with exit code 0

我认为你所指的文档是在谈论这种变量:

#include <iostream>

int i;

int main() {
    std::cout << i << std::endl;
}

以这种方式声明的变量保证初始化为 0,而在函数内部创建的非静态基本变量未初始化。

根据规范,读取未初始化的变量会导致未定义的行为,如果您尝试,您的编译器应该打印出警告。

因此,您获得的值不是 C++ 的“预期值”,只是您的编译器希望打印一次的值。正如 463035818_is_not_a_number 所说,未定义的行为就是未定义的。大多数编译器会尽量保持友好并尽可能多地保留程序的功能(这可能就是为什么它仍然在控制台上打印一些东西的原因)但我建议不要相信它,anything 可能发生。