[C++: 引用】(一)

简介: [C++: 引用】(一)

To shine,not be illuminated.

1fdf66bbb6ce46cb8944cfb60be54706.jpg

1 引用概念

引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空间,它和它引用的变量 共用同一块内存空间。

比如:你的正式姓名和你的小名或者别名。

使用方法:

类型& 引用变量名(对象名) = 引用实体;

我们可以来举个例子:

int main()
{
  int a = 10;
  int& sa = a;
  int b = 20;
  int& sb = b;
  return 0;
}

a5bbcd36cf494a3d9e70209a96a804c8.png

通过调试我们也能够发现a和sa其实共用的是同一块空间,这也就解释了为啥引用只是给变量取了一个新名字,并没有为引用变量开辟新的空间。

注意:正确用法:引用类型必须和引用实体同种类型

2 引用特性

  • 1. 引用在定义时必须初始化
  • 2. 一个变量可以有多个引用
  • 3. 引用一旦引用一个实体,再不能引用其他实体

我们一个一个来看:

假如引用变量不初始化

int main()
{
  int a = 10;
  int& sa ;
  return 0;
}

这种方式显然是会直接报错的:

0cf868b1ec314d399c1831301abd4d66.png

一个引用变量可以有多个引用:

int main()
{
  int a = 10;
  int& b = a;
  int& c = a;
  return 0;
}

这里b和c都是a的别名,修改其中任何一个这3个的值都会发生改变。

假如拿一个已经引用过的实体再去引用其他实体:

47b45db9105343cd9c17b46b7dc46aac.png

这样写直接就报错了,有人会想到换一种方式写呢:

int main()
{
  int a = 10;
  int& b = a;
  int e = 20;
  b = e;
  return 0;
}

这里b还是e的引用吗?

显然不是的,这里只是将e的值赋给了b,b还是a的引用,程序结束后a和b都应该为20,我们可以打开监视窗口看看:

18eb9fb3f71442e4bbe9e8a5bebfdfb9.png

3 常引用

我们来看下面这个栗子:

int main()
{
  const int a = 10;
  int& b = a;
  return 0;
}

上述代码能够被编译通过吗?

f1f8009fca314a24b36ead7e1dbd3769.png

很明显这种写法是错误的,C++认为这种写法是不安全的,const int是只读权限,而int&却是既有读权限也有写权限,像这种权限放大C++是不支持的,权限缩小或者权限相等C++是支持的。

比如下面这两种写法都是合法的:

int main()
{
  //权限相等
  const int a = 10;
  const int& b = a;
  //权限缩小
  int c = 20;
  const int& d = c;
  return 0;
}

再来看下面一段代码:

int main() 
{
  double d = 12.12;
  int& i = d;
  return 0;
}

上面代码能够编译通过吗?

cceff86316f5413b86bcb1f15c1750f1.png

我们可能会想:引用类型和引用实体必须是同一种类型的,所以说就错误了呗。

引用类型和引用实体一定要是同一种类型的吗?

我们将程序再修改一下:

1dcba0698cd14d63acb593365a7a8d8a.png

我们发现程序居然能够跑过,只是错误变成了一个警告,为什么呢?

通过C语言的知识我们知道:double类型的d如果要转换成int类型的i是会发生截断的,首先会用一个临时变量来保存被截断后的值,再将该值换一个新的名称,d本身是不会发生任何改变的。而这个临时变量是具有常数性的(这个很重要,后面也会反复的提及)不能被修改,也就是不能够写,只能够读。由于权限不能够升高,所以我们必须得加const才行。

我们再来回答上面的问题,引用类型和引用实体一定要是同一种类型的吗?

如果想要正确的使用,这句话显然没有什么毛病,但是并不是说引用类型和引用实体不是同一种类型程序一定就会报错。

建议:以后我们引用一个实体是如果不想改变这个实体,最好加上const.

目录
相关文章
|
7月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
99 1
|
8月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
121 2
|
6月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
44 3
|
6月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
7月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
75 5
|
7月前
|
C++
C++引用
C++引用
|
7月前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
42 5
|
7月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
7月前
|
安全 测试技术 C++
C++中的引用
C++中的引用
41 1