初始化列表

C++初始化列表用于高效地初始化成员变量,避免默认构造函数的额外开销。尤其适用于常量成员、引用类型及无默认构造函数的类。初始化阶段先于构造函数体内的计算阶段,确保成员按声明顺序有效初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化列表

class Baby{
public:
	//初始化列表,以冒号开头,并用逗号隔开,括号内为初始值,不能缺少{}
	Baby(string s,int a):name(s),age(a){};
private:
	string name;
	int age;
};

初始化只能进行一次,而构造函数体内可进行多次赋值。

class Baby{
public:
	Baby(string s,int a):name(s),age(a)//这里才是初始化的地方
	{
		//这里就不是初始化,是构造函数体内赋值
		name=s;
		age=a;
	};
private:
	string name;
	int age;
};

注意:
1、每个成员变量在初始化列表中只能出现一次
2、初始化类成员时,按照声明的顺序初始化

为什么使用初始化列表呢?

初始化类中成员的方式有两种:
1、使用初始化列表
2、在构造函数体内进行赋值操作

对于内置类型,如int,float等,上面两种方式差别不大,但是对于类类型,一般都会使用初始化列表,因为使用初始化列表可以少一次默认构造函数的调用,这对于类来说,非常高效。

只能用初始化列表的情况

1、常量成员。
即const成员变量。因为常量成员只能初始化不能进行赋值。
2、引用类型。
引用必须在定义的时候初始化,并且不能重新赋值,故也要写在初始化列表中。
3、没有默认构造函数的类类型。
因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。

//自定义类,没有默认构造函数
class B{
public:
	B(int b):_b(b){};
private:
	int _b;
};
class Baby{
public:
	//一定要用初始化列表初始化
	Baby(string s,int a,double w,int b):name(s),age(a),weight(w),b1(b){};
private:
	string name;
	int &age;//引用类型
	const double weight;//常量成员
	B b1;
};

补充:
构造函数的执行分为初始化阶段计算阶段

初始化阶段
所有类类型的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中。

计算阶段
用于执行构造函数中的赋值操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只有帅跟我匹配

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值