part01-引用
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了part01-引用相关的知识,希望对你有一定的参考价值。
目录
一、概念
1>基础定义
类型名 & 引用名 = 变量名;
上面这个写法就定义了一个变量名的引用。
举个例子:
int x = 0;
int & y = x;
此时 y 引用了x, y的类型是int &
变量的引用就等价于这个变量,简单来说,y就是x的别名。
举个代码例子,如下一目了然
#include<iostream>
using namespace std;
int main()
int x = 3;
int & y = x;
cout << y; // 3
cout << x; // 3
y = 5;
cout << x; // 5
return 0;
注意📢,引用需要注意三点
- 定义时,一定要初始化成某个变量,比如上面的例子y是引用的x
- 引用从一而终!y生是x的引用,死也是x的引用,不会在引用别的变量了
- 引用时只能引用变量,不能引用常量和表达式
ok,了解了注意的三点,看个例子加深理解
int a=1,b=2;
int & x = a;
int & y = x;// 此时x和y都引用了a
y = 10;
cout << a << endl; //10
y = b;
cout << a << endl; //2
上面的例子需要稍微理解的是,当y=b的时候,此时是赋值,b的值给了y,但是y还是a的引用,所以此时a打印是2.
例题1.1
下面程序片段输出结果是什么?(答案会公布在评论区)
int a = 1,b = 2;
int & r = a;
r = b;
r = 7;
cout << a << endl;
nice,恭喜各位已经对引用小有了解,那么接下来,带大家一起看一个简单的实战,让大家了解一下引用的妙处。
大家回忆一下,在c语言中,交换两个变量的值的函数如何写?如下
void swap(int* a, int* b)
int tmp;
tmp = *a; *a = *b; *b = tmp;
int x,y;
swap(&x,&y)
上面的代码是c实现x和y交换值的代码,是不是比较繁琐?再一起看看c++的引用
void swap(int& a, int& b)
int tmp;
tmp = a; a = b; b = tmp;
int x,y;
swap(x,y)
上面的写法是不是看上去清爽许多。
2>引用作为函数的返回值
int x =3;
int & SetValue() return x;
int main()
SetValue() = 10;
cout << x; //10
return 0;
SetValue函数的返回值是引用,同时,这个引用了全局变量x,所以赋值的操作,就等于对x的赋值;这里埋一个坑,大家肯定会有人思考,为什么要把函数写在赋值号左边?这个操作有什么意义呢?莫急,待后面的章节中,和大家一起升级打怪后,会填坑的!
3>常引用
定义引用时,前加const关键字,就是常引用
int x;
const int & y = x;
y的类型就是const int &;是不是感觉很熟悉
那么它的作用是什么呢?就是不能通过修改常引用去修改引用的值;直白点借用上面的例子说就是,你不能通过给y赋值,来修改x的值,如下:
int x=3;
const int & y=x;
y=200;//编译直接报错
x=200;//ok
4>附件餐
说一个工作中可能会遇到的的类似情况
常引用和非常引用的转换问题,const T & 和 const T是不同的类型,重要的是重复三遍哈!!!
T & 类型的引用或者T类型的变量可以用来初始化const T & 类型的引用
但是,const T & 类型的引用或者const T类型的常变量可以用来初始化 T & 类型的引用,除非进行强制类型转换。
例题1.2
下面程序片段哪个正确?(答案会公布在评论区)
A) int n = 4;
int & r = n * 5;
B) int n = 6;
const int & r = n;
r = 7;
C) int n = 8;
const int & r1 = n;
int & r2 = r1;
D) int n = 8;
int & r1 = n;
const int r2 = r1;
好了,今天关于引用的部分就到此结束了哈,小白成神之路,刚刚开始~
以上是关于part01-引用的主要内容,如果未能解决你的问题,请参考以下文章