1. 数组的初始化规则
C++有几条关于初始化数组的规则,他们限制了初始化的时刻,决定了数组的元素数目与初始化器中值的数目不相同时将发生的情况。
-
只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组:
int a[4] = { 1, 2, 3, 4}; // OK int b[4]; //OK b[4] = { 1, 2, 3, 4}; // 不合法 a = b; //不合法
-
可以用下标分别给数组中的元素赋值;
-
初始化时,提供的值可以少于数组的元素数目,那么编译器会把其他元素设置为0;
float c[5] = { 1.22, 3.54}
-
如果初始化数组时方括号内为空,C++编译器会计算元素的个数。
int d[] = { 1, 2, 3, 4}; // 计算元素个数
2.C++11数组初始化方法
C++11将使用大括号的初始化(列表初始化)作为一种通用初始化方式,可用于所有类型,数组以前就可以使用列表初始化,但C++11中列初始化新增类一些功能。
-
初始化数组时,可省略等号( = ):
int a[10] = { 1, 2, 3, 4}; // OK with C++11
-
可不在大括号内包含任何东西,即把所有元素都设置为 0 :
float b[10] = {}; // 全为 0
-
列表初始化禁止缩窄转换:
long c[4] = { 2, 5, 3.0} // 不合法,因为将 3.0 浮点数转化为整型为缩窄转换,即使小数点后为 0; char d[4] = { 'h', 'f', 124334, '\0'} //不合法,因为124334超出了char的取值范围; char e[4] = { 'h', 'f', 12, '\0'} //合法