Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+;中静态变量的默认初始化值是什么+;物体?_C++_Static_Initialization - Fatal编程技术网

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

感谢您花时间发布一个完整的答案,它实际回答了问题。这是最好的答案。