Sta*_*cer 5 c++ static initialization
我相信所有的数值变量都被初始化为零,但是static bool或者像是static MyClass*什么?
我查看了互联网,但我找到的大多数结果都是关于如何将int这样的东西初始化为非零值,我只是想知道默认值.
Som*_*ude 10
除非另行初始化,否则全局变量,局部静态变量和静态成员变量均为零初始化.这意味着浮点值为零,布尔值为假,指针为nullptr等
请参见http://en.cppreference.com/w/cpp/language/zero_initialization
该标准的第8.5 / 5节解释了对对象进行零初始化的含义。对于标量类型,零初始化后的值将转换0为目标类型。
零初始化的结果bool是false,因为这是转换的结果0来bool。顺便说一句,bool是整数类型。
指针初始化为零的结果是空指针值,因为这是转换0为指针类型的结果。
具有静态存储持续时间的对象被初始化为零。这是包括在草案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。