我相信所有数值变量都被初始化为零,但static bool
或static MyClass*
等内容呢?
我查看了互联网,但我发现的大部分结果都是关于如何初始化像int这样的非零值,我只是想知道默认值。
答案 0 :(得分:7)
全局变量,局部静态变量和静态成员变量均为零初始化,除非另有初始化。这意味着浮点值为零,布尔值为假,指针为nullptr等
请参阅http://en.cppreference.com/w/cpp/language/zero_initialization
答案 1 :(得分:3)
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
。