自学内容网 自学内容网

【C++】引用(reference)

引用是对一个变量或者对象取的别名

定义:真名的数据类型& 别名 = 真名;

既然是对一个变量或者对象取别名,那就得先有变量或对象,不能凭空取一个别名。也就是定义引用必须初始化。

  • 对引用的操作和对引用对应的变量的操作是完全等价的
  • 引用的类型必须和其所对应的变量的类型相同
  • 引用不是定义新的变量或对象,因此不会为引用开辟新的空间内存

示例:

#include<iostream>
using namespace std;
int main() {
int a = 8;
int& ref_a = a;
ref_a++;
cout << a << endl;//9
}

其实引用就是指针的语法糖(syntax sugar)

我们为什么要使用引用呢?我们干嘛要起个别名而不直接用真名呢?

假设我们想通过调用一个函数来实现一个整型变量的自增,有下面3种传递方式

值传递:形参的改变无法改变实参的值

void fun(int x) {
x++;
}
int main() {
int a = 8;
fun(a);
cout << a << endl;//8
}

地址传递:形参的改变可以改变实参的值

void fun(int* x) {
(*x)++;//不加括号就会先自增再解引用
}
int main() {
int a = 8;
fun(&a);
cout << a << endl;//9
}

引用传递:形参的改变可以改变实参的值

void fun(int& x) {
x++;
}
int main() {
int a = 8;
fun(a);
cout << a << endl;//9
}

是不是比使用指针更简洁些呢

那么,可不可以给引用取别名呢?答案是可以的

int a = 8;
int& a1 = a;
int& a2 = a1;//给引用取别名(引用的嵌套)
int& a3 = a;//同一个对象或变量可以取多个别名

引用和指针的区别

  1. 指针是另一个变量,而引用是自己本身,指针会占用额外存储空间,但引用不会占用额外存储空间,也就是说别名和真名是同一个东西,共享同一块内存
  2. 指针可以不用初始化赋值,但是引用必须初始化赋值
  3. 指针可以有多级指针,但是引用没有多级引用
  4. 指针可以改变指向,但是引用不能改变其所指代的变量或对象
  5. 指针是间接访问,引用是直接访问

关于指针的更多内容:【C语言】指针


原文地址:https://blog.csdn.net/qq_45951891/article/details/143804954

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!