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

时间:2017-08-08 19:09:17

标签: c++ variables

这很简单,但我无法解释。我声明了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&lt;&lt;”第二行总是给出值= 1。

请允许任何人为我解释这个。非常感谢你。

1 个答案:

答案 0 :(得分:3)

读取未初始化的变量是C ++中的Undefined Behavior。

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

你的程序可能会崩溃,完全符合你的期望,永远运行或做任何你能想象到的事情。

现在合理的编译器实现不会使用UB作为格式化硬盘的借口(但是可以),但是UB仍然意味着你的程序已经根据标准没有任何意义,并且您可以并且将在编译器和操作系统之间获得任意结果。在您参与UB时,不要期望您现在使用当前编译器在当前操作系统上看到的结果与使用不同编译器或不同操作系统的情况相同。

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