c++引用补充:常引用

目录

前言:C++还提供了常引用(const reference)的概念,它是一种特殊类型的引用,用于指向常量对象。本文将详细介绍常引用的概念、用法以及在代码中的应用。

1、常引用定义格式:

2、常量引用注意:字面量不能赋给引用,但可以赋给const引用,const修饰的引用不可以修改。

3、总结:[const引用使用场景] 常量引用主要用在函数的形参,尤其是类的拷贝和复制构造函数。将函数的形参定义为常量引用的好处:引用不产生新的变量,减少形参与实参传递时的开销。

4、常量的引用


前言:C++还提供了常引用(const reference)的概念,它是一种特殊类型的引用,用于指向常量对象。本文将详细介绍常引用的概念、用法以及在代码中的应用。

1、常引用定义格式:

const Type& ref = val;

下面看一段代码:

typedef struct {
	int num;
	char name[32];
}stu;
void printLucy(stu &tmp) {
	cout << "学号改变前:" << tmp.num << ",姓名:" << tmp.name << endl;
	tmp.num = 2000;
	cout << "学号学号改变后:" << tmp.num << ",姓名:" << tmp.name << endl;
}
void test() {
	//需求:定义一个函数,遍历结构体中成员(只进行读操作)
	stu Lucy = {100,"张三" };
	printLucy(Lucy);	
}
int main() {
	test();
}

 运行结果:

在上述代码中,明显不符合要求,要求是在函数中进行只读操作,而上面代码的确使用引用对结构体进行了遍历输出,但此时却存在一个问题,就是可以修改结构体的值,这和要求明显不符,为了解决这一问题,下面我们通过常引用的方式来遍历。

常引用示例:

typedef struct {
	int num;
	char name[32];
}stu;
void printLucy(const stu &tmp) {
	cout << "学号改变前:" << tmp.num << ",姓名:" << tmp.name << endl;
	tmp.num = 2000;//err 不可以赋值
	cout << "学号学号改变后:" << tmp.num << ",姓名:" << tmp.name << endl;
}
void test() {
	//需求:定义一个函数,遍历结构体中成员(只进行读操作)
	stu Lucy = {100,"张三" };
	printLucy(Lucy);	
}
int main() {
	test();
}

运行结果:

由此结果可以看出,当给引用前面加上const之后,结构体中的值就不能在函数中被修改,这也符合要求 。

2、常量引用注意:字面量不能赋给引用,但可以赋给const引用,const修饰的引用不可以修改。

 示例:

void test() {
	int a = 100;
	const int& b = a;//此时b就是a
	//b = 200; err 不能通过b的值
	a = 200;//ok
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
}
int main() {
	test();
}

运行结果:

3、总结:[const引用使用场景] 常量引用主要用在函数的形参,尤其是类的拷贝和复制构造函数。将函数的形参定义为常量引用的好处:引用不产生新的变量,减少形参与实参传递时的开销。

4、常量的引用

void test() {
	//int& a = 10; //err 类型不匹配。 10的类型为const int
	const int& a = 10;
	cout << "a=" << a << endl;

}
int main() {
	test();
}

运行结果:

在对常量引用前,必须加const,否者系统会报错,避免了用别名给常量赋值这一情况。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晚笛诶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值