c ++对象中静态变量的默认初始化值是什么?

Sta*_*cer 5 c++ static initialization

我相信所有的数值变量都被初始化为零,但是static bool或者像是static MyClass*什么?

我查看了互联网,但我找到的大多数结果都是关于如何将int这样的东西初始化为非零值,我只是想知道默认值.

Som*_*ude 10

除非另行初始化,否则全局变量,局部静态变量和静态成员变量均为零初始化.这意味着浮点值为零,布尔值为假,指针为nullptr等

请参见http://en.cppreference.com/w/cpp/language/zero_initialization


Bri*_*ian 5

该标准的第8.5 / 5节解释了对对象进行零初始化的含义。对于标量类型,零初始化后的值将转换0为目标类型。

零初始化的结果boolfalse,因为这是转换的结果0bool。顺便说一句,bool是整数类型。

指针初始化为零的结果是空指针值,因为这是转换0为指针类型的结果。


Sha*_*our 5

具有静态存储持续时间的对象被初始化为零。这是包括在草案C ++标准的部分3.6.2 非本地变量的初始化它说:

在进行任何其他初始化之前,应将具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量进行零初始化(8.5)。

零初始化是覆盖在8.5 初始值设定其中说:

零初始化类型T的对象或引用意味着:

  • 如果T是标量类型(3.9),则将对象设置为值0(零),作为整数常量表达式,转换为T; 103
  • 如果T是(可能是cv限定的)非联合类类型,则将每个非静态数据成员和每个基类子对象初始化为零,并将填充初始化为零位;
  • 如果T是(可能是cv限定的)联合类型,则将对象的第一个非静态命名数据成员初始化为零,并将填充初始化为零位;
  • 如果T是数组类型,则每个元素都初始化为零。
  • 如果T是引用类型,则不执行初始化。

两个布尔指针是标量类型,并且因此通过第一子弹将被设定为0