【C++】基础语法:常引用

前言

在学习拷贝构造函数的时候又遇到了常引用 就来仔细地学习一下

引入

我们知道引用相当于对象的别名 修改引用就是修改对象本身 它们是同一个地址

常引用

但引用本身也有一些小问题:

  1. 当我在修改引用的时候 却不希望修改对象本身 我们就可以用常引用
  2. 当我将引用等价于另一个引用的时候 也是有隐患的 可能在不知道的情况下就出现了错误

下面给出一个例子

void func(const int& x)
{
	//想只修改x 但不影响a
}

int main()
{
	int a = 0;
	int& b = a;
	b++;
	//想只修改b 但不影响a
	func(a);
	//其实可以理解为
	//const b = a;

	// 权限的缩小 --可以的
	const int& c = a;

	const int x = 10;
	//这里的x只有可读权限 r	
	// 权限的放大 --不可以的
	//int& y = x;
	//但y却有可读和可写权限 rw
	const int& y = x;
	//int& z = y;
	const int& z = 10;

	return 0;
}

由此引出了一个概念 权限可以缩小 但不能放大

本来可以通过修改引用来修改对象本身的 但我加了const 使得只能修改引用本身 这就是权限的缩小

还有一道思考题

	//这么写可以吗
	const int& m = a + x;

是可以的 因为a+x表达式的返回值是临时对象临时对象具有常性

还有另一个原因建议用常引用

	func(10);
	func(a + x);

当func函数的参数传入的常量或具有常属性的临时变量的时候 如果形参不是常引用 那就是权限的放大

常引用和隐式类型转换

先给出一段代码 他可以正常运行吗?

int main()
{
	double d = 1.1;
	const int& ri = d;

	return 0;
}

隐式类型转换的时候 先将对象拷贝给一个int类型的临时变量 这样就可以进行赋值

结语

关于常引用的学习到这里就结束了 希望你有所收获!~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值