【C++-笔记】关于引用
在学习函数参数传递的时候提到了引用的相关内容,因此打算做一个关于C++引用的总结。
首先是关于引用的定义:引用(reference)为对象起了另外一个名字,引用类型引用另外一种类型,通过声明符写成&d的形式来定义引用类型,其中d是声明的变量名。
初始化变量时,初始值会被拷贝到新建的对象中,然而在定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,因为无法重新绑定到另外一个对象,因此引用必须初始化。
传引用参数
在C++当中,参数是可以通过引用传递的。使用引用主要有如下优点:
- 当某种类型不支持拷贝操作时,函数只能够通过引用形参访问
- 拷贝较大的类类型对象或者容器对象时比较低效,使用引用避免了拷贝过程
- 当函数需要返回多个值时,使用引用可以使部分参数通过引用返回
const的引用
把引用绑定到const对象上,称之为对常量的引用(reference to const),对常量的引用不能用作修改它所绑定的对象。
const int i = 0;
const int &r1 = i; // 没有问题,将一个常量引用绑定在另一个常量上
int &r2 = i; // 错误,因为试图让一个非常量引用绑定到一个常量上,假设这句话合法,即可以通过r2来更改i的值,这明显是不可以的
但是,如果使用一个常量引用绑定一个非常量的话,却是可以的:
int i = 42;
const int &r1 = i;
i = 0;
//结果表明,即使是常量引用,在绑定的值改变时,常量引用本身的值也改变了
cout << i << " " << r1; //i和r1都是0
PS:书上关于常量引用绑定到非常量有一个非常有意思的描述:所谓指向常量的引用,不过是引用自以为是罢了,它们觉得自己指向了常量,所以自觉不去改变所指对象的值
根据书上的说法,当绑定的对象和引用的类型不一致时,会先生成一个与引用类型相同的临时量,然后再将引用绑定到这个临时量上:
double a = 3.14;
const int &r1 = a;
// 实际上的过程是
const int temp = a;
const int &r1 = temp;
然后进一步考虑,如果我此时修改了a的值,r1的值会变化吗?
根据代码输出的结果来看,r1的值是3,虽然a的值改变了,但是r1的值并没有变,所以这种行为也没有必要,毕竟使用引用也就是为了能够和绑定的值一起改变
未完待续。。。。
参考书:C++ Primer 中文版 第五版
本文作者:无涯清酒
本文链接:https://www.cnblogs.com/wuyawine/p/16522694.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步