在使用之前,应正确定义和初始化每个变量(为其赋值)。但是在某些情况下,c ++会将变量设置为默认值零。如下面的情况。
class A{
...
static int val;
...};
//int val = 10; //This is the usual definition.
int val;//Definition without assigning a value.
...
A a; //a class A object
std::cout<<a.val;
结果为零。显然,编译器做了一些事情来将变量a.val初始化为零。我很好奇他们什么时候会这样做呢?
答案 0 :(得分:8)
http://en.cppreference.com/w/cpp/language/zero_initialization
在以下情况下执行零初始化:
- 对于每个具有静态或线程本地存储持续时间的命名变量,在任何其他初始化之前。
- 作为value-initialization(,带有一对空括号或大括号)的一部分,用于非类类型和没有构造函数的值初始化类类型的成员。< / LI>
- 使用太短的字符串文字初始化字符数组时,数组的其余部分将进行零初始化。
醇>