C++中引用不能重新赋值的理解
来源:互联网 发布:铣刀移动网络销售 编辑:程序博客网 时间:2024/05/17 04:33
教材上说引用是不能重新赋值的,可是下面的程序能正常运行,不会出错。这里怎么出现了引用赋值语句呢(语句[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;”,则在编译时就会出现错误了。
1 0
- C++中引用不能重新赋值的理解
- C++中引用不能重新赋值的理解
- C++中引用不能重新赋值的理解
- Python中对象的理解:引用和赋值
- 深入理解PHP中赋值与引用
- 深入理解PHP中赋值与引用
- 深入理解php的引用赋值
- 对象引用和赋值的理解
- 对C语言中赋值运算符的理解
- C++“引用”的理解
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- java中对象的引用与赋值
- JAVA中对象的赋值与引用
- Java中对象的赋值与引用
- Object-C中对“引用(reference)”的理解
- C/C++中 关于对 引用变量 赋值的一些规则
- Block中循环引用、局部变量不能修改的一些理解
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
- c4.6
- NSURL 、NSURLRequest、NSURLConnection、NSURLSession、NSURLSessionDataTask
- text/* image/* application/* 类型理解
- DataTable转JSON
- redhat 6 配置 yum 源的两种方法
- C++中引用不能重新赋值的理解
- Android SP 介绍
- QC ALM 11 邮箱设置
- 【java虚拟机系列】java虚拟机系列之JVM总述
- 在Web站点中创建和使用Rss源
- GIT 分布式 SVN 集中式 版本控制系统
- sql 随笔
- android 仿记事本登陆
- linux安装编译配置ffmpeg