初始化列表vs列表初始化

这两个概念如此相似,以至于很多时候都在混用。

初始化列表是构造函数的周边概念,表示在执行构造函数中,先执行初始化列表,再执行函数体内的语句。

构造函数的编写尽量采用初始化列表的方式,特别是类中有自定义类出现的时候。而且有些情况,必须采用初始化列表才能初始化成员变量,如类中有引用类型,类中有const成员变量时等。

class myclass
{
public:
    myclass(int a, int b, int c):m_a(a),m_b(b),m_c(c)
    {
        std::cout << "construct function called!" << std::endl;
    }
private:
    int m_a;
    const int m_b;
    int &m_c;
};

列表初始化是c++11为了统一内置变量,结构,类型的初始化方式的一种尝试,即使用者可以采用花括号{}来初始化这些变量。

为什么所有类型都可以采用列表来初始化变量?那是因为c++11引入了initializer_list这个类模板。如何使用这个类模板?这里提供一个案例。

#include <iostream>
#include <initializer_list>

class myclass
{
public:
    myclass(int a,int b)
    {
        std::cout << a << "---" << b << std::endl;        
    }
    myclass(std::initializer_list<int> il)
    {
        for(auto &i : il){
            std::cout << i << std::endl;
        }
    }
};

int main()
{
    myclass aa(1,2);
    myclass bb{3,4,5};
    return 0;
}

即可以作为函数参数,这里作为构造函数的参数,也可以用作类成员函数,或普通函数的参数。那么声明对象的时候必须采用花括号初始化对象,而这样的好处是可以不用指定参数个数,当然它的主要用途是用来支持泛型编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值