C++ — 引用不能重新赋值的理解

教材上说引用是不能重新赋值的,可是下面的程序能正常运行,不会出错。这里怎么出现了引用赋值语句呢(语句[1])?是不是教材错了?原因究竟是什么呢?

请看如下程序:

#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;

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

另外:

常引用所引用的对象的值是不能更改的,即上述示例中若将语句“int& k=i;”更改为“const int& k=I;”,则在编译时就会出现错误了。

转载:https://blog.csdn.net/gao1440156051/article/details/51073433
原文链接: https://www.cnblogs.com/linxisuo/p/14863379.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/211260

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午12:43
下一篇 2023年2月13日 上午12:44

相关推荐