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

标签 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

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

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

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

最佳答案

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

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

您的程序可能会崩溃、完全按照您的预期运行、永远运行或执行您可以想象的任何其他操作。

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

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

关于c++ - C++ 中未初始化变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45576294/

相关文章:

c++ - 静态初始化时能否安全创建线程?

c++ - 项目中无法识别代码块文件

php 变量 $page 未正确传递到 URL

javascript - 从 jquery 到页面变量

mysql - 使用来自 1 个表的 1 列的变量的三个 MySQL 查询需要解析到临时表中

Python:如何将混合大小写批量重命名为带下划线的小写

c++ - 询问比要求更多的元素

c++ - QGraphicsScene 在 QGraphicsView 中奇怪地缩放

python - 从命名管道读取连续数据

bash 将最后的用户输入值永久保存在脚本本身中