在哪些情况下c ++会将变量初始化为零?

ric*_*d.g 3 c++ initialization

在使用之前,应该正确定义和初始化每个变量(为其赋值).但是在某些情况下,c ++会将变量设置为默认值零.像下面的情况.

class A{
    ...
    static int val;
    ...};

//int val = 10; //This is the usual definition.
int val;//Definition without assigning a value.
...
A a;  //a class A object
std::cout<<a.val;
Run Code Online (Sandbox Code Playgroud)

结果将为零.显然,编译器做了一些事情来将变量a.val初始化为零.我很好奇他们什么时候会这样做?

Pav*_*sov 8

http://en.cppreference.com/w/cpp/language/zero_initialization

在以下情况下执行零初始化:

  1. 对于具有静态或线程本地存储持续时间的每个命名变量,在任何其他初始化之前.
  2. 作为非类类型的值初始化(即带有一对空括号或大括号)的一部分,以及没有构造函数的值初始化类类型的成员.
  3. 当使用太短的字符串文字初始化字符数组时,数组的其余部分将进行零初始化.

  • 最后一行是可疑的.字符数组的处理方式与所有其他数组相同.`int a [2] = {2}`将`a [1]`初始化为零. (3认同)