栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类的构造函数之初始化列表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类的构造函数之初始化列表

什么是初始化列表?

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式,如:

class Entity {
private:
    int _i;
public:

    Entity(int i) :_i(i) {
        cout << "entity" << _i << "的构造" << endl;
    }
};

ps:初始化列表中,每个成员只能初始化一次

初始化列表是每个成员定义的地方,无论有没有显式使用初始化列表,其默认都会使用初始化列表对成员进行初始化,故此有了一些必须要使用初始化列表的情况

  • 未提供默认构造的自定义类型成员
    需要在初始化列表内显示调用构造函数
  • const类型成员
    const成员只有一次初始化的机会,所以必须定义时初始化
  • 引用成员变量
    引用语法上也规定必须在定义时初始化

tips:初始化时与初始化列表出现的成员顺序无关系,而是按照声明顺序进程初始化

如下:

class Entity {
public:
    int _j;
    int _i;
public:

    Entity(int i) :_i(i),_j(_i) {
        cout << "entity" << _i << "的构造" << endl;
    }

    ~Entity() {
        cout << "进行Entity的析构:" << _i << endl;
    }
};

int main() {
    Entity entity(1);
    cout << entity._i << " " << entity._j << endl;
    return 0;
}

 

解释:

由于_j是先进行声明,所以_j先用_i进行了初始化,但由于此时_i也未进行初始化,是个随机值,所以_j被初始化成为了随机值;随后_i才被初始化为1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号