返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中引用的知识点有哪些
  • 679
分享到

C++中引用的知识点有哪些

2023-06-29 08:06:00 679人浏览 独家记忆
摘要

本篇内容主要讲解“c++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不

本篇内容主要讲解“c++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!

引用的概念

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

比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。那么这里的“铁牛”、“黑旋风”就称李逵的引用。

在程序中呢,引用的用法如下:

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

举个例子:

void TestRef(){int a = 10;int& ra = a;//<====定义引用类型printf("%p\n", &a); //打印出a的地址printf("%p\n", &ra); //打印出ra的地址}

结果如下:

C++中引用的知识点有哪些

其中ra为a的引用,可见 a 和 ra 的地址一样,这就说明了变量与变量的引用公用的一块内存空间。

特别注意:引用类型必须和引用实体是同种类型的

引用特性

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用

3. 引用一旦引用一个实体,再不能引用其他实体

例如:

void TestRef(){int a = 10;// int& ra; // 该条语句编译时会出错,因为没有初始化int& ra = a;int& rra = a;printf("%p %p %p\n", &a, &ra, &rra);}

C++中引用的知识点有哪些

知道引用的特性后,我们就可以简化在C语言中一些简单函数的写法,如交换两个数,可直接传变量的引用为参数来实现,具体如下:

C++中引用的知识点有哪些

可见当传入的参数为变量的引用时,就可以避免在次开辟内存空间,一定程度上提高了代码运行效率。

常引用

所谓常引用就是在一个变量的引用前加一个关键字 const 来使这个引用具有常量的性质。

如下所示:

void TestConstRef(){const int a = 10;//int& ra = a; // 该语句编译时会出错,因为a为常量,而ra为变量(由&前面的类型决定,为int变量类型)const int& ra = a;// int& b = 10; // 该语句编译时会出错,b为常量const int& b = 10;double d = 12.34;//int& rd = d; // 该语句编译时会出错,类型不同const int& rd = d;}

再例如:

int main(){int i = 10;double d = i;//double& r=i; //这里编译器会报错,具体原因如下图示const double& r = i; //加上const 修饰就会使引用具有常性    return 0;}

C++中引用的知识点有哪些

所以只有在定义引用前加上const 修饰就能使之具有常性。

另外要注意使用const引用时的权限问题,例如:

#include<iOStream>using namespace std;int main(){// 使用常变量时变成常变量的别名的条件:不变或者缩小常变量的读写权限是可以的,//放大你常变量读写权限不行的const int a = 10;// int& b = a;  // 不能这样定义b,这样会使a的权限变大,编译器会报错int c = 20;const int& d = c; // 可以这样定义,d变成的c的别名,d不能修改c,相当于把c的权限缩小                      //其中c是可以改变的,但是d只能读不能写return 0;}

如上解释一下:并不是每个别名(即引用)都跟原名字有一样的权限,具体要看怎么修饰。

使用场景

1、做参数

void Swap(int& left, int& right){  int temp = left;  left = right;  right = temp;}

这里提一下引用做参数的优点:

传引用是为了减少传值传参时的拷贝

使用const修饰引用时可以保护形参不会被改变

const引用做参数时,即可接收变量,也可以接收常量
 

总的来说,函数传参如果想减少拷贝就用引用传参,如果函数中不改变这个参数最好用const 引用传参

2、做返回值

看如下栗子:

C++中引用的知识点有哪些

为什么打印出的 ret=7 呢?

这是因为函数的返回类型为 int& ,所以返回值 c 的类型就是 int&,而 ret 作为接收函数的返回值的量,也为 int& 型,所以在这里就可以把 ret 看做是 c 的别名,当程序来到 Add(3,4); 这条语句时,返回值 c 就变为了 7,所以此时的 ret 的值也就为7。

以上也说明了使用引用做返回值会有一定的风险性。

引用和指针的区别

最后来总结一下引用与指针的区别。

在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。

来看这样一段代码:

int main(){int a = 10;int& ra = a;ra = 20;int* pa = &a;*pa = 20;return 0;}

再查看其汇编代码,会发现引用与指针的实现方式是一样的。

C++中引用的知识点有哪些

引用与指针的不同点:

引用在定义时必须初始化,指针没有要求

引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体

没有NULL引用,但有NULL指针

在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)

引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

有多级指针,但是没有多级引用

访问实体方式不同,指针需要显式解引用,引用编译器自己处理

引用比指针使用起来相对更安全(因为指针使用不慎就会造成野指针)

到此,相信大家对“C++中引用的知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C++中引用的知识点有哪些

本文链接: https://lsjlt.com/news/323783.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中引用的知识点有哪些
    本篇内容主要讲解“C++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不...
    99+
    2023-06-29
  • MySQL的索引知识点有哪些
    本文小编为大家详细介绍“MySQL的索引知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL的索引知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、索引介绍索引(index)是帮助M...
    99+
    2023-06-29
  • ORACLE索引知识点有哪些
    这篇文章主要讲解了“ORACLE索引知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ORACLE索引知识点有哪些”吧!总结一下索引失效的原因:单独...
    99+
    2024-04-02
  • MySQL索引知识点有哪些
    本篇内容主要讲解“MySQL索引知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引知识点有哪些”吧! Mysq...
    99+
    2024-04-02
  • C#中所要知道的知识点有哪些
    本文小编为大家详细介绍“C#中所要知道的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中所要知道的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.在C#中,类名首字母需大写。如:c...
    99+
    2023-07-05
  • C/C++指针知识点有哪些
    本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用...
    99+
    2023-06-03
  • C++的基础知识点有哪些
    这篇文章主要介绍“C++的基础知识点有哪些”,在日常操作中,相信很多人在C++的基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的基础知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • c++11 chrono的知识点有哪些
    这篇文章主要介绍“c++11 chrono的知识点有哪些”,在日常操作中,相信很多人在c++11 chrono的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++11&nbs...
    99+
    2023-06-21
  • C++语法知识点有哪些
    这篇文章主要讲解了“C++语法知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++语法知识点有哪些”吧!C++程序的组成 (1)预处理命令以#开头。三类预处理命令。A 宏定义命令...
    99+
    2023-06-17
  • MySQL索引的相关知识点有哪些
    本篇内容介绍了“MySQL索引的相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!索引介绍索引...
    99+
    2024-04-02
  • 引入vue.js文件的知识点有哪些
    这篇文章给大家分享的是有关引入vue.js文件的知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、引入vue.js 文件1. 用脚本标签<script> ...
    99+
    2024-04-02
  • MySql中索引、锁、事务知识点有哪些
    这篇文章主要为大家展示了“MySql中索引、锁、事务知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySql中索引、锁、事务知识点有哪些”这篇文章吧...
    99+
    2024-04-02
  • C#多线程的知识点有哪些
    这篇文章主要介绍“C#多线程的知识点有哪些”,在日常操作中,相信很多人在C#多线程的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#多线程的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • C++ Primer变量的知识点有哪些
    这篇文章主要介绍“C++ Primer变量的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++ Primer变量的知识点有哪些”文章能帮助大家解决问题。变量的定义形式一般为:类型说明符...
    99+
    2023-06-26
  • MySQL索引优化知识点有哪些
    这篇文章主要介绍“MySQL索引优化知识点有哪些”,在日常操作中,相信很多人在MySQL索引优化知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL索引优化知...
    99+
    2024-04-02
  • MySQL中实用的知识点有哪些
    这篇文章主要介绍了MySQL中实用的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中实用的知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.grou...
    99+
    2023-01-29
    mysql
  • mysql中的键和索引相关知识点有哪些
    本篇内容介绍了“mysql中的键和索引相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、主...
    99+
    2024-04-02
  • MySQL索引及优化的知识点有哪些
    这篇文章主要介绍“MySQL索引及优化的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL索引及优化的知识点有哪些”文章能帮助大家解决问题。索引是...
    99+
    2023-04-06
    mysql
  • java中的HTML知识点有哪些
    这篇文章主要介绍“java中的HTML知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java中的HTML知识点有哪些”文章能帮助大家解决问题。   1...
    99+
    2024-04-02
  • Go中Sync.Map的知识点有哪些
    这篇文章主要讲解了“ Go中Sync.Map的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ Go中Sync.Map的知识点有哪些”吧!sync.Map 优势在 Go 官方文档中...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作