C++ c+;中静态变量的默认初始化值是什么+;物体?
我相信所有的数值变量都初始化为零,但是像C++ c+;中静态变量的默认初始化值是什么+;物体?,c++,static,initialization,C++,Static,Initialization,我相信所有的数值变量都初始化为零,但是像静态bool或静态MyClass*这样的东西呢 我已经查看了interwebs,但我发现的大多数结果都是关于如何将int等初始化为非零值的,我只想知道默认值。全局变量、局部静态变量和静态成员变量都是零初始化的,除非另有初始化。这意味着浮点值为零,布尔值为假,指针为空,等等 参见本标准第8.5/5节,解释了零初始化对象的含义。对于标量类型,零初始化后的值将是将0转换为目标类型的结果 零初始化bool的结果是false,因为这是将0转换为bool的结果。顺便说
静态bool
或静态MyClass*
这样的东西呢
我已经查看了interwebs,但我发现的大多数结果都是关于如何将int等初始化为非零值的,我只想知道默认值。全局变量、局部静态变量和静态成员变量都是零初始化的,除非另有初始化。这意味着浮点值为零,布尔值为假,指针为空,等等
参见本标准第8.5/5节,解释了零初始化对象的含义。对于标量类型,零初始化后的值将是将
0
转换为目标类型的结果
零初始化bool
的结果是false
,因为这是将0
转换为bool
的结果。顺便说一下,bool
是一种整数类型
零初始化指针的结果是空指针值,因为这是将
0
转换为指针类型的结果。具有静态存储持续时间的对象是零初始化的。这在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是引用类型,则不执行初始化
bool和指针都是标量类型,因此到第一个项目符号将被设置为
0
感谢您花时间发布一个完整的答案,它实际回答了问题。这是最好的答案。