C++是否自动将整数初始化为零?

Per*_*ryC 5 c++ coverity

我注意到了几个Coverity(静态分析工具)错误类型'未初始化的标量变量',这些错误具有很高的影响力.其中很多只是没有初始化的整数.

将它们初始化为零与默认情况下C++的作用有什么不同?

R S*_*ahu 12

C++是否自动将整数初始化为零?

对于自动变量:

有些编译器可能会这样做,但标准并不要求它.符合标准的实现可能会使它们成为未初始化的垃圾值.

对于static变量:

除非另有明确初始化,否则必须将它们初始化为零.

  • "有些编译器可能会这样做." 你确定吗?Clang,gcc和MSVC都不会在Release版本中初始化标量. (3认同)
  • @KABoissonneault编译器在调试版本中初始化它们非常有用.对于一些极不可能达到你想要的价值:正如你所指出的那样,将它们初始化为0通常会产生反效果,但是将它们初始化为0xDEADBEAF或类似的东西是一个好主意(我认为这就是现代的MVS确实). (2认同)

Sig*_*erm 8

默认情况下,C++不会将整数变量初始化为零.

在调试模式下编译项目时,某些编译器可能将它们清零或填充一些默认值.在发布模式下,通常不会发生.

静态变量有一个例外,但默认情况下可以安全地假设任何unitialized都包含一个随机值.

注意未初始化的变量.发现这种错误很难,可能会浪费很多时间.常见症状:程序在调试模式下工作正常,但在发布时表现奇怪.