目录
一、什么是引用?
引用是 C++ 中的一个重要语法。
它的作用是:
给已经存在的变量取一个别名。
基本写法:
cpp
类型& 引用名 = 变量名;
例如:
cpp
#include <iostream>
using namespace std;
int main() {
int a = 10;
int& ra = a;
cout << a << endl;
cout << ra << endl;
return 0;
}
这里ra就是a的引用,也可以理解为a的另一个名字。
二、引用和原变量使用同一块空间
cpp
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int& ra = a;
ra = 20;
cout << a << endl;
cout << ra << endl;
return 0;
}
运行结果:
cpp
20
20
修改ra,其实就是修改a。
因为引用不是重新开辟一片空间,而是给变量起了一个别名。
三、引用必须初始化
引用在定义是必须初始化。
正确写法:
cpp
int a = 10;
int& ra = a;
错误写法:
cpp
int& ra;
因为引用是别名,如果定义时不说明他是谁的别名,就没有意义。
四、引用一旦绑定,不能更换对象
cpp
int a = 10;
int b = 20;
int& ra = a;
ra = b;
这里很容易被误解。
ra = b; 不是让ra改成b的引用,而是把b的值赋给a。
执行后:
cpp
a = 20;
b = 20;
但ra仍然是a的引用。
所以要记住:
引用一旦绑定一个变量,就不能再改成其他变量的引用了。
五、一个变量可以有多个引用
cpp
int a = 10;
int& ra = a;
int& rb = a;
int& rc = ra;
这里 a、ra、rb、rc 本质上都是同一块空间的不同名字。
通过一个名字修改值,其他名字看到的值都会改变。
六、常引用
常引用就是用const修饰的引用。
cpp
int a = 10;
const int& ra = a;
这里ra是a的只读别名,不能通过ra修改a。
例如:
cpp
int a = 10;
const int& ra = a;
ra = 10;// 错误
虽然a本身可以修改,但是通过ra不能修改。
七、权限可以缩小,不能放大
常引用中有一个重要规则:
权限可以缩小,不能放大。
普通变量可以被常引用引用:
cpp
int a = 10;
const int& ra = a;
这世界可以的。
因为a本来就可以修改,但ra只是给它起了一个只读别名,相当于权限缩小。
但是const变量不能被普通引用引用:
cpp
const int a = 10;
int& ra = a;// 错误
因为a本来是只读的,如果用普通引用ra引用它,就可以通过ra修改a,这相当于权限放大,所以不允许。
正确写法是:
cpp
const int a = 10;
const int& ra = a;
八、常引用可以绑定临时变量
普通引用不能随便绑定类型转换产生的临时变量。
例如:
cpp
int a = 10;
double& rd = a;// 错误
因为a是int类型,而rd是double&类型。
但是常引用可以:
cpp
int a = 10;
const double& rd = a;
这里发生隐式类型转换,编译器会生成一个临时double类型变量,然后让rd引用这个临时变量。
可以简单理解为:
cpp
double temp = a;
const double& rd = temp;
所以常引用可以绑定临时变量。
九、小结
本篇主要学习了C++中的引用和常引用。
需要记住:
- 引用是变量的别名;
- 引用定义是必须初始化;
- 引用和原变量共用同一块空间;
- 引用一旦绑定,不能再引用其他变量;
- 一个变量可以有多个引用;
- 常引用是只读别名;
- 权限可以缩小,不能放大;
- 常饮用可以绑定临时变量。
引用是C++中非常重要的基础知识,后面含输出啊俺惨、函数返回值、、类和对象都会频繁用到,所以这一块需要重点理解。