未初始化的变量有什么危险?

Tel*_*elf 6 c++

在我正在编写的程序中,我的 .h 文件中目前有几个未初始化的变量,所有这些变量都在运行时初始化。但是,在 Visual Studio 中,每次我执行此操作时它都会警告我“始终初始化成员变量”,尽管这样做似乎毫无意义。我很清楚在未初始化时尝试使用变量会导致未定义的行为,但据我所知,不这样做可以避免这种情况。我是否忽略了什么?

谢谢。

t.n*_*ese 6

这些变量可以包含任何值,如果您不初始化它们并且以未初始化的状态读取它们是未定义的行为。(除非它们是零初始化

如果您忘记初始化其中一个,并且意外读取它会导致您期望它在当前系统配置中应该具有的值(由于未定义的行为),那么您的程序可能会在系统更新后出现不可预测/意外的行为,在不同的系统上或当您更改代码时。

这些类型的错误很难调试。因此,即使您在运行时设置它们,也建议将它们初始化为已知值,以便您拥有一个具有可预测行为的受控环境。

有一些例外,例如,如果您在声明变量后立即设置它,并且不能直接设置它,就像使用流运算符设置它的值一样。

  • @MasonSchmidgall 即使使用简单的未初始化整数,它们引起的 UB 也会使编译器在发布版本中做奇怪的事情。 (2认同)