C++学习笔记4 引用不能再更改绑定的对象的理解

本文解析了C++中引用的本质,指出引用的赋值不是对象的重新绑定,而是通过引用改变原对象值。重点讲解了引用与常量引用的区别,以及为何引用设计上天然不可重新赋值。通过实例说明和误区澄清,帮助读者深入掌握引用的正确用法和限制。
摘要由CSDN通过智能技术生成

其实引用是一个简化的设计,所以我们要从设计的目的上看待其用法。

引用的设计场景,就是在将一个变量赋值给一个函数时,在这个函数的形参中,定义为该变量类型的引用。那么这样的话。达到两个目的。
1、在函数中所有对该变量对象的操作,就都可以直接作用在外部的函数中。
2、变量对象在调用函数中,不会再开辟任何新空间来促成函数对该变量的使用。

另外一个比较容易引起歧义的示例:

不要把引用对象重新赋值理解为引用重新赋值

#include<iostream.h>

void main()
{
	int i=1,j=5;
	int& k=i;
	k=j; //语句[1]
	cout<<"i="<<i<<"; j="<<j<<"; k="<<k<<endl;
}

首先想想程序运行结果应该是什么呢?

VC6.0上运行后的结果是:

i=5; j=5; k=5

分析:

程序没有错误,是正确的,但是并不能说明:引用能重新赋值。很明显,引用是不能重新赋值的,只是理解上错了!

引用的赋值:是指引用初始化时,它的引用对象只能是变量,并且,一旦它指定为某一个对象的引用后,就不能更改了。但是,可以用这个引用来改变它的对象的值,从而达到引用的目的——作为变量对象的别名。

如上例,引用k初始化为i,即k从此以后一直是i的引用,若想让k不再是i的引用而成为别的变量的引用那是不可能的。所以,接下来的一句“k=j;”就不能理解成:取消k是i的引用而将k作为j的引用。正确的理解应该是:利用引用k来改变它所指对象i的值,即相当于语句“k=5;”。

若在上示例语句“k=j;”后加上一句“j=10”,结果将是:“i=5; j=10; k=5”,从这个结果就能很好理解了。
所谓的引用的重新赋值,应该是:

int x,y,z; 
int &x=y; 
&x=z;  #error

这种是对引用x,改变了它的指定对象,一开始是y的引用,之后,又重新说明是z的引用,这种引用的重新赋值是不允许的。

常引用所引用的对象的值是不能重新赋值的

即上述示例中若将语句“int& k=i;”更改为“const int& k=I;”,则在编译时就会出现错误了。

这里需要与常量指针与指针常量结合起来理解。也就是指针存在两种与常量的结合使用。来达到使得指针不可以重新赋值或者指针指向的变量不可以重新赋值两种效果。

然后引用从设计上天然就是不可以重新赋值的,就是第一节中想说明的。另外就是饮用指向的对象,可以通过本节中的设置达到限制其不可以对其指向的对象进行修改。

参考
C++中引用不能再更改绑定的对象的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值