软件开发工程师修炼中|
📂C/C++
🔖cpp
2022-07-26 21:21阅读: 27评论: 0推荐: 0

【C++-笔记】关于引用

在学习函数参数传递的时候提到了引用的相关内容,因此打算做一个关于C++引用的总结。

首先是关于引用的定义:引用(reference)为对象起了另外一个名字,引用类型引用另外一种类型,通过声明符写成&d的形式来定义引用类型,其中d是声明的变量名。

初始化变量时,初始值会被拷贝到新建的对象中,然而在定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,因为无法重新绑定到另外一个对象,因此引用必须初始化。

传引用参数

在C++当中,参数是可以通过引用传递的。使用引用主要有如下优点:

  1. 当某种类型不支持拷贝操作时,函数只能够通过引用形参访问
  2. 拷贝较大的类类型对象或者容器对象时比较低效,使用引用避免了拷贝过程
  3. 当函数需要返回多个值时,使用引用可以使部分参数通过引用返回

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 中国大陆许可协议进行许可。

posted @   无涯清酒  阅读(27)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起