C ++数组初始化

这是一种将数组初始化为全0的forms

所有编译器都支持char myarray[ARRAY_SIZE] = {0}

如果是这样,是否有其他types的语法相似? 例如

 bool myBoolArray[ARRAY_SIZE] = {false} 

是的,所有C ++编译器都支持这种初始化forms。 它是C ++语言的一部分。 实际上,从C语言来的C ++是一个成语。 在C语言中= { 0 }是一个惯用的通用零初始化器 。 这在C ++中也是如此。

由于这个initalizer是普遍的,对于bool数组,你并不需要一个不同的“语法”。 0作为booltypes的初始化程序,所以

 bool myBoolArray[ARRAY_SIZE] = { 0 }; 

保证用false初始化整个数组。 以及

 char* myPtrArray[ARRAY_SIZE] = { 0 }; 

保证使用char *types的空指针来初始化整个数组。

如果你相信它提高了可读性,你当然可以使用

 bool myBoolArray[ARRAY_SIZE] = { false }; char* myPtrArray[ARRAY_SIZE] = { nullptr }; 

但重点是= { 0 }变种给你完全相同的结果。

但是,在C ++ = { 0 }可能不适用于所有types,例如枚举types,不能使用整数0初始化。 但是C ++支持更短的表单

 T myArray[ARRAY_SIZE] = {}; 

即只是一对{} 。 这将默认初始化任何types的数组(假设元素允许默认初始化),这意味着对于基本(标量)types,整个数组将被正确初始化。

请注意,'='在C ++ 11通用初始化语法中是可选的,通常被认为是更好的写法:

 char myarray[ARRAY_SIZE] {0} 

是的,我相信它应该可以工作,也可以应用于其他数据types。

不过,对于类数组,如果初始化程序列表中的元素less于数组中的元素,则默认构造函数用于其余元素。 如果没有为该类定义默认构造函数,则初始化程序列表必须是完整的 – 也就是说,数组中的每个元素必须有一个初始化程序。

你可以用这种types的方式在C ++中声明数组。 如果你知道数组的大小,那么你应该声明数组为:integer: int myArray[array_size]; Double: double myArray[array_size]; 字符和string: char myStringArray[array_size]; 字符和string的区别如下

 char myCharArray[6]={'a','b','c','d','e','f'}; char myStringArray[6]="abcdef"; 

如果你不知道数组的大小,那么你应该像下面那样将数组留空。

整数: int myArray[array_size];

Double: double myArray[array_size];