首页 05-引用的介绍
文章
取消

05-引用的介绍

C++的引用

引用的介绍

引用在C++当中也算一种新的数据类型,但引用本身并不是一个对象,因此无法定义引用的引用,且引用的初始值必须是一个对象;

引用相当于是将引用与初始值绑定在一起,因此引用必须要求初始化

以代码展示如下图:

1
2
3
4
5
6
7
8
9
10
11
char c; // 一个字符类型
char *p = &c;   // 指向字符类型的指针
char &r = c;    // 对指针类型的引用,一个东西的两个名字。 
/*----------------------------------------------------------------------------*/
const int &z = x;   // 代表无法通过修改z的值来修改x,因为是const
// 作为函数使用时
void f(int &x);
f(y);   // 这里比较不同的一点是,y的值可能会被改变,因为其对应的x是引用。x的改变会导致y的改变。
/*----------------------------------------------------------------------------*/
void func(int &);
func (i * 3);   // 报错,必须有个可以做左值的变量,而(i*3)不可以。

引用改变,那么引用的对象也会发生改变。

与指针的区别在于:

  • 引用不可为空,指针可以。
  • 引用依赖于现存变量,是那个变量的替代品,而指针独立于现存变量,也就是说指针可以随时指向别的变量。
  • 引用无法改到一个新的地址,指针本身就是地址,自然可以。
  • 通过引用可以改变原对象的所有信息,而通过指针无法对对象做改变,因为指针即使发生变化,他指向的对象不一定会有什么变化。

在C++的函数调用中,有一种情况必须结合const与引用一起调用,当一个类被作为函数的参数引入时,是必须要保护类的完整性的,这时候const的必要性就完全体现了,至于为什么用引用,是因为这样可以尽量减少*的出现。

在这部分也会涉及到一些问题,比如说定义了一个const常量,那么也需要确保对这个常量的引用也是const类型。我们来列举出一系列代码:

1
2
3
4
5
6
7
8
9
const int ci = 1024;
const int &r1 = ci;     // 这部分的引用是没有问题的
r1 = 42, int &r2 = ci;  // 这一行都是错误的,因为要求r1,r2都是不可改变的
------------------------------------------------------------------------------
int i = 42;
const int &r1 = i;  // True
const int &r2 = 42; // True
const int &r3 = r1 * 2; // True
int &r4 = r1 * 2;       // 引用错误,因为定义的r4是一个非常量引用

一些注意要点

可以通过引用来返回额外信息:

不像python等高级语言,函数可以一次返回多个变量,在使用C++时如有对应需求,可以结合引用以及返回值去实现需求。

  • 因为当引用作为形参,引用的对象也是会发生改变的。
  • 函数的作用要注意区分形参实参,形参传入函数并不一定会使实参发生变化,这一点需要注意。
  • 如果需要使得通过对形参的改变去改变实参,可以使用C++中的引用去解决问题。

本文由作者按照 CC BY 4.0 进行授权

04-const限定符

06-函数的全面介绍