C++老鸟日记026 聚合初始化的知识

版权声明

---------------------------------------------------------------------------------------------------------------------

该文章原创于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()计算数组的尺寸。聚合初始化是我们对于一组对象进行初始化的常用方法,希望大家能熟练掌握。

 

你可能感兴趣的:(C++)