C++中引用详解
来源:互联网 发布:微信公众号授权域名 编辑:程序博客网 时间:2024/06/05 04:44
C++中引入了引用这个复合类型,上一篇我写了关于引用和指针的区别,在这篇中我总结一个有关引用的需要注意的地方。
1.引用不会产生新的变量,而是给变量起了一个别名
编译器不会给引用变量开辟新的空间,如果对引用传值的语句进行反汇编查看,可以看出,编译器在底层进行引用处理的时候,跟指针处理是一样的,即引用变量与引用变量绑定的变量的地址相同。
2.引用变量不是一个对象
引用变量仅仅是实体的一个别名,并不是一个对象,所以对对象的操作,对引用变量不能做。
比如,不能定义引用的引用。
因为引用绑定的实体一定是一个变量,但是引用变量并不是一个对象,我们没有办法绑定一个引用变量作为实体,所以不能定义引用的引用。
3.引用再定义的时候必须初始化
引用在定义的时候就必须绑定一个实体,编译器才能给引用变量赋值,不然引用变量在接下来的作用周期中都不能再改变自己的值了,这个时候在给引用变量绑定实体,肯定是错误的。所以引用在定义的时候就必须初始化。
4.引用一旦绑定一个实体,就不能成为别的变量的引用
引用是变量的别名,所以一旦引用绑定了一个实体,如果要再次改变引用实体,就会报错
5.引用前必须要有类型
在定义引用变量时,如果前面没有类型,编译器无法识别到底是引用变量的定义还是&取地址符号,所以必须要有类型
int &j = i; //引用&j = i; //取地址?引用?无法分清,错误
6.引用绑定常量时,前面要加const
int &j = 10; //错误const int &j = 10; //正确
7.不同类型之间引用的定义
在C++中不同类型变量之间的赋值,会产生临时变量,如果在引用定义时,实体与引用变量的类型不同,则会产生问题,因为临时变量具有常量属性,即现在其实是把临时变量的值给了引用,就到了上面第六条的问题
double f1 = 12.34;int &i = f1; // 错误
double f1 = 12.34;const int &i = f1;//正确,把引用变量变成常量,即可以跟临时变量绑定
8.对指针变量进行引用
int *p = &a;int &q = p;//p = q = &a;//&p = &q;
9.对数组进行引用
对数组进行引用的格式一定要写对
int a[5] = {0};int (&arr)[5] = a;
10.关于指针和引用的区别
上一篇有,大家去那一篇看看
11.关于传值和传引用的区别
1.传值对产生临时变量,但是传引用因为相当于传的是地址,所以不会产生临时变量
2.如果在传引用时不想改变实参,要加const
3.引用传值和指针传值没有区别
他们代码的反汇编的实现是一样的,都是传址
12.注意!不要返回栈空间上的引用!
- C引用详解
- C++“引用”详解
- C++中引用详解
- C++中引用详解
- Java中引用的详解
- C++中引用的详解
- Java中引用的详解
- C++中引用符&详解
- JavaScript中引用类型详解
- c中指针与引用
- python 中引用c语言
- 深入分析C语言中结构体指针的定义与引用详解
- C/C++指针和引用详解
- PHP中引用的详解(引用计数、写时拷贝)
- PHP中引用的详解(引用计数、写时拷贝)
- PHP中引用的详解(引用计数、写时拷贝)
- PHP中引用的详解(引用计数、写时拷贝)
- PHP中引用的详解(引用计数、写时拷贝)
- 调试方式
- 2016sdau课程练习专题一 1001 problemB
- 百度实习生 一面
- 第五周项目1-三角形类雏形(5)
- (二)electron 文件系统访问
- C++中引用详解
- Quartz任务调度(5)TriggerListener分版本超详细解析
- UIImagePickerController, UISearchBar
- Android ListView监听上滑或下滑动作
- 简单的关机打卡的java代码
- Java runnable和 thread
- Quartz任务调度(6)schedulerListener分版本超详细解析
- 传统MapReduce框架
- 前端面试宝典