阵列声明已经填充了零?

时间:2017-11-26 17:05:53

标签: c++

这个声明在C ++中做了什么? C ++ 14

unsigned char Mem[0x1000] {0};

1 个答案:

答案 0 :(得分:2)

unsigned char Mem[0x1000] {0};

它创建一个0x1000元素的数组,并使用初始化程序{0}对其进行初始化。这会将第一个元素设置为0,然后对其余元素进行值初始化,并将它们设置为0

即。它与此相同,只是对每个元素进行值初始化:

unsigned char Mem[0x1000] {};

这也与说= {}相同,除了在C ++ 11之前只能使用= {}表单,现在你也可以使用{}而不是=

对于这种情况:

unsigned char Mem[0x1000] {0x12, 0x00};

它将第一个元素设置为0x12,然后将第二个元素设置为0x00,然后将余数设置为0。即它与:

相同
unsigned char Mem[0x1000] {0x12};
  

如果每个元素都填充零,为什么这样做?

在C语言中,您无法使用空的初始值设定项,因此您无法说出{}并且必须执行{0}。这在C ++中并不正确,所以当他们做同样的事情时,没有理由更喜欢{0}{}

  

我需要"清洁"我声明的每个变量?

如果您不使用任何初始化程序,那么元素将是未初始化的,因此具有不确定的值,并且在您为其分配值之前读取元素将是未定义的行为。