C++11 初始化列表

成员变量初始化顺序:
    初始化顺序规则:
        ① 基类优先: 如果类是从一个或多个基类继承而来的,那么基类的构造函数会首先被调用,按照他们被继承时声明的顺序
        ② 成员变量初始化顺序: 成员变量按照它们在类定义中声明的顺序进行初始化,而不是它们在构造函数初始化列表中的顺序。
        ③ 构造函数体执行: 所有成员变量和基类初始化完成之后,执行构造函数体内的代码。

C++11新特性:
对于一个聚合类型,使用初始化列表相当于对其中的每个元素分别赋值,而对于非聚合类型,则需要先自定义一个合适的构造函数,此时使用初始化列表将会调用它对应的构造函数。

std::initializer_list
    在C++的STL容器中,可以进行任意长度的数据的初始化,使用初始化列表也只能进行固定参数的初始化,如果想要做到和STL一样有任意长度初始化的能力,可以使用std::initializer_list这个轻量级的类模板来实现。
    特点:
        ① 是一个轻量级的容器类型,内部定义了迭代器iterator等容器必须的概念,遍历时得到的迭代器是只读的。
        ② 对于std::initializer_list<T>而言,他可以接收任意长度的初始化列表,但是要求元素必须是同种类型T。
        ③ 在std::initializer_list内部有三个成员接口: size(), begin(), end()
        ④ std::initializer_list对象只能被整体初始化或者赋值
    使用实例:
        void func(std::initializer_list<int> ls) {
            for (auto it = ls.begin(); it != ls.end(); it++) {
                cout << it << " ";
            }
            cout << endl;
        }
        函数调用: func({3,4,5,6,7,8}); // 参数是一个初始化列表,列表中可以有多个成员
        输出结果: 3 4 5 6 7 8

参考视频: B站up主 - 爱编程的大丙 - C++11实用特性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值