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
作为bool
types的初始化程序,所以
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];