找回密码
 立即注册
收起左侧

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

1
回复
4802
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-9-19 15:31:13 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 baizy77 于 2018-10-1 20:57 编辑

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org
作者: 女儿叫老白 (白振勇)
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
本套课程属于:《C++跨平台开发干货》系列课程。
-----------------------------------------------------------------------------

引言:
----------------------------------------------------------------------------
       通常,在C++编码规范中会要求对对象进行初始化。比如我们定义一个类对象,会通过其构造函数对其进行初始化;如果定义一个基本数据类型(如int),会通过赋初值的方式初始化,那么如果我们定义一组数据,该怎么初始化呢?

正文:
----------------------------------------------------------------------------
       我们这里所说的定义一组数据并对其初始化,指的就是聚合初始化。比如int a[4];这里定义了一个整数数组,它有4个成员,我们当然可以通过:

  1. int a[4] = {1, 2, 3, 4};
复制代码

       这样的方式来执行初始化操作。也可以通过遍历的方式来做:

  1. for (int idx=0; idx<4; idx++) {
  2.     a[idx] = idx;
  3. }
复制代码

但是,还有一个更简单的方法:
  1. int a[4] = {0};
复制代码

通过这种语法,我们为数组a指定了第一个成员的值,后面的值没有指定,则编译器会自动将其赋为0(假设我们为第一个元素赋值为2,编译器仍然为后续元素自动赋0值)。所以,这是一种给数组初始化的简单方法。
有时候,我们懒得确定数组的初始元素个数,我们就会这样定义:
  1. int a[] = {1, 2, 3, 4};
复制代码

       如果一旦需要增加元素,只需要在里面添加数值即可,而无需指定数组的大小。那么,我们该怎么确定其大小呢?其实可以通过下面的方法:
  1. sizeof (a)/sizeof (*a);
  2.        for (int idx=0; idx<(sizeof (a)/ sizeof (*a)) {
  3.     cout << a[idx] << endl;
  4. }
复制代码

       如果是class或struct,聚合初始化的方法也一样。

  1. class CMyClass {
  2. public:
  3.     CMyClass(int n) : m_nVal(n){}
  4.     CMyClass(const CMyClass&); // 拷贝构造函数
  5. private;
  6.     int m_nValue;
  7. };
  8. CMyClass objects[3] = { CMyClass(1), CMyClass (3), CMyClass (4)};
复制代码

这种写法也是对每个成员直接进行初始化。

结语:
----------------------------------------------------------------------------
       inta[3] = {0};这种编码方式是我们经常用到的。要善于运用sizeof()计算数组的尺寸。聚合初始化是我们对于一组对象进行初始化的常用方法,希望大家能熟练掌握。

参考资料
----------------------------------------------------------------------------
《C++编程思想》两卷合订本中文版(6.6章节),(美) Bruce Eckel  Chuck Allison著
回复

使用道具 举报

累计签到:50 天
连续签到:1 天
2018-9-22 11:16:26 显示全部楼层
OK    记住  ,不写大小, 用sizeof实现。       thank you  ,  teacher
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了