建议使用构造函数初始值列表而非赋值(C++)

首先看一下两者的区别:

//初始值列表
Student(string n1,int n2,int a):name(n1),num(n2),age(a){};

//赋值
Student(string n1,int n2,int a){
    name=n1;
    num=n2;
    age=a;
}

以上代码中,前者与后者的效果是一样的,有时我们可以忽略构造函数初始值列表和赋值之间的差异,但并非总能这样。如果成员是const或者引用的话,就必须使用初始值列表,若用赋值的方式将产生编译错误:

class Student{
public:
    Student(string n1,const int n2,int a){
    name=n1; //正确
    num=n2;  //错误:不能给const赋值
    age=a;  //错误:a没被初始化
    }
private:
    string name;
    const int num;
    int &age;
};

该构造函数初始化的正确形式应该是:

Student(string n1,const int n2,int a):name(n1),num(n2),age(a){};

建议大家养成使用构造函数初始值列表的习惯,这样能避免某些意想不到的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值