C++学习笔记05:引用和常引用

目录

一、什么是引用?

二、引用和原变量使用同一块空间

三、引用必须初始化

四、引用一旦绑定,不能更换对象

五、一个变量可以有多个引用

六、常引用

七、权限可以缩小,不能放大

八、常引用可以绑定临时变量

九、小结


一、什么是引用?

引用是 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++中的引用和常引用。

需要记住:

  1. 引用是变量的别名;
  2. 引用定义是必须初始化;
  3. 引用和原变量共用同一块空间;
  4. 引用一旦绑定,不能再引用其他变量;
  5. 一个变量可以有多个引用;
  6. 常引用是只读别名;
  7. 权限可以缩小,不能放大;
  8. 常饮用可以绑定临时变量。

引用是C++中非常重要的基础知识,后面含输出啊俺惨、函数返回值、、类和对象都会频繁用到,所以这一块需要重点理解。

相关推荐
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化7 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
学习星球10 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子10 小时前
C++ 引用折叠详解
c++
布莱克60511 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
牛油果子哥q12 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
万法若空12 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++
常驻客栈13 小时前
B-深入理解计算机系统第3版之第11章:网络编程
开发语言·笔记·学习笔记·常驻客栈·深入理解计算机系统