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

时间:2014-07-30 17:57:19

标签: c++ static initialization

我相信所有数值变量都被初始化为零,但static boolstatic MyClass*等内容呢?

我查看了互联网,但我发现的大部分结果都是关于如何初始化像int这样的非零值,我只是想知道默认值。

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

该标准的§8.5/ 5解释了零对象初始化的意义。对于标量类型,零初始化后的值将是将0转换为目标类型的结果。

归零bool的结果为false,因为这是将0转换为bool的结果。顺便提一下,bool是整数类型。

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

答案 2 :(得分:3)

具有静态存储持续时间的对象初始化为零。 draft C++ standard部分3.6.2 初始化非本地变量中包含了这一点,其中包含:

  

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

并且8.5 Initializers 涵盖了零初始化,其中包含:

  

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

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

bool 指针都是标量类型,因此第一个项目符号将设置为0