c++中必须使用初始化列表初始化的的四种情况

c++中必须使用初始化列表初始化的的四种情况

1. 必须使用初始化列表初始化一个引用成员;

class CBase
{
public:
    CBase(int a) : m_a(a)  //正确,m_a是一个变量的引用,必须通过初始化列表初始化
    {
        // m_a = a;           //错误
        cout << "m_a:" << m_a << endl;
    }

public:
    int& m_a;
};

2. 必须使用初始化列表初始化一个常量成员;

class CBase
{
public:
    CBase(int a) : m_a(a)  //m_a是一个const常量,必须通过初始化列表初始化
    {
        //m_a = a;          //错误,此处相当于赋值操作,但是const是不可修改的,无法作为左值;
    }

public:
    const int m_a;
};

3. 初始化派生类的基类时,必须使用初始化列表进行初始化;

#include <iostream>
using namespace std;
 
class Base
{
    public:
        Base(int a) : val(a) {}
    private:
        int val;
};
 
class A : public Base
{
    public:
        A(int v) : p(v), Base(v) {}
        void print_val() { cout << "hello:" << p << endl;}
    private:
        int p;
};
 
int main(int argc ,char **argv)
{
    int pp = 45;
    A b(pp);
    b.print_val();
}

4. 当初始化成员对象时,必须使用初始化列表进行初始化;

class CBase
{
public:
    CBase(int a) : m_a(a)  //m_a是一个const常量,必须通过初始化列表初始化
    {
        //m_a = a;          //错误,此处相当于赋值操作,但是const是不可修改的,无法作为左值;
    }

public:
    const int m_a;
};


class CSub
{
public:
    CSub() : m_obj(88)    //正确, 成员对象初始化
    {
        cout << "this is m_obj::m_a = " << m_obj.m_a << endl;
    }

public:
    CBase m_obj;
};

参考文章:
1、https://www.cnblogs.com/weiyouqing/p/14598387.html
2、https://www.bbsmax.com/A/Gkz12KpQJR/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值