版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org)
作者: 女儿叫老白 (白振勇)
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
课程目录:《C++老鸟日记》目录
本套课程属于:《C++跨平台开发干货》系列课程。
----------------------------------------------------------------------------------------------------------------------
(6.6)
引言:
----------------------------------------------------------------------------
通常,在C++编码规范中会要求对对象进行初始化。比如我们定义一个类对象,会通过其构造函数对其进行初始化;如果定义一个基本数据类型(如int),会通过赋初值的方式初始化,那么如果我们定义一组数据,该怎么初始化呢?
正文:
----------------------------------------------------------------------------
我们这里所说的定义一组数据并对其初始化,指的就是聚合初始化。比如int a[4];这里定义了一个整数数组,它有4个成员,我们当然可以通过:
int a[4] = {1, 2, 3, 4};
这样的方式来执行初始化操作。也可以通过遍历的方式来做:
for (int idx=0; idx<4; idx++) {
a[idx] = idx;
}
但是,还有一个更简单的方法:
int a[4] = {0};
通过这种语法,我们为数组a指定了第一个成员的值,后面的值没有指定,则编译器会自动将其赋为0(假设我们为第一个元素赋值为2,编译器仍然为后续元素自动赋0值)。所以,这是一种给数组初始化的简单方法。
有时候,我们懒得确定数组的初始元素个数,我们就会这样定义:
int a[] = {1, 2, 3, 4};
如果一旦需要增加元素,只需要在里面添加数值即可,而无需指定数组的大小。那么,我们该怎么确定其大小呢?其实可以通过下面的方法:
sizeof (a)/sizeof (*a);
for (int idx=0; idx<(sizeof (a)/ sizeof (*a)) {
cout << a[idx] << endl;
}
如果是class或struct,聚合初始化的方法也一样。
class CMyClass {
public:
CMyClass(int n) : m_nVal(n){}
CMyClass(const CMyClass&); // 拷贝构造函数
private;
int m_nValue;
};
CMyClass objects[3] = { CMyClass(1), CMyClass (3), CMyClass (4)};
这种写法也是对每个成员直接进行初始化。
结语:
----------------------------------------------------------------------------
int a[3] = {0};这种编码方式是我们经常用到的。要善于运用sizeof()计算数组的尺寸。聚合初始化是我们对于一组对象进行初始化的常用方法,希望大家能熟练掌握。