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

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

更新:感谢您的回答!现在我知道 i 是在 main 函数中定义的,然后 i 没有定义。但是为什么一个未定义的整数的值是 os 4200187?

#include <iostream>

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

结果:

4200187

Process finished with exit code 0
oyangnann 回答:为什么C++中整数的默认初始化值为4200187?

我认为您所指的文档正在讨论此类变量:

#include <iostream>

int i;

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

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

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

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

本文链接:https://www.f2er.com/22557.html

大家都在问