C++中未初始化变量的值

Value of a non-initialized variable in C++

本文关键字:变量 初始化 C++      更新时间:2023-10-16

这很简单,但我无法解释。我声明了 4 个变量,并用 C++ 打印出来:

#include <iostream>
using namespace std;
int main(){
int a, b, c, d;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
return 0;
}

结果是:

a = 0
b = 1
c = 0
d = 0

我想如果我不初始化变量的值,程序将从内存中获取一些随机值。或者至少它都等于零。我不知道这些价值观的差异从何而来。

这不是因为特定的变量b,如果我切换那些"cout <<"行,第二行总是给出值 = 1。

谁能为我解释一下,请。非常感谢。

读取未初始化的变量是C++中的未定义行为。

编译器可以自由地为您的程序生成它喜欢的任何代码,因为您违反了语言的规则。

你的程序可能会崩溃,完全按照你的期望,永远运行或做任何其他你能想象的事情。

现在,编译器的合理实现不会以UB为借口来格式化您的硬盘驱动器(但它们可以(,但是UB仍然意味着您的程序根据标准没有意义,并且您可以并且将获得跨编译器和操作系统的任意结果。不要指望你现在看到的结果,使用你当前的编译器,在你当前的操作系统上,在不同的情况下,在不同的编译器或不同的操作系统上,当涉及UB时,结果是相同的。

简而言之;有责任不调用 UB。编译器不需要警告您。如果你想要一个具有确定性行为的程序,你不需要调用UB。