引用 随笔

news/2024/11/25 19:53:12/

本质

引用的本质其实就是指针常量 *const p

引用的底层机制实际上是和指针一样的。不要相信有别名,不要认为引用可以节省一个指针的空间,因为这一切不会发生,编译器还是会把引用解释为指针。

引用和指针本质上没有区别。

举例:

int a = 3;                         // 声明普通的整型变量。int& ra = a;                    // 创建引用ra,ra是a的别名。											把int&替换成int* const   把a替换成&aint* const rb = &a;        // 声明指针常量rb,让它指向变量a。cout << "a的地址:"  <<	&a << endl;cout << "ra的地址:" << &ra  << endl;cout << "rb的地址:" << rb << endl;

输出的地址都是相同的。

注意

引用作为函数形参时

传引用不必使用二级指针

传递引用给函数就相当于传递变量本身。在函数内部,这个引用将作为原始数据的别名出现,所以你对这个引用的任何操作就是对原始数据的操作。

当你在 C 或 C++ 中使用二级指针(指向指针的指针)时,你通常是希望在函数内部修改指针的值,这样就可以影响到函数外部的指针。因为在 C 和 C++ 中,函数参数是以值传递的方式传入函数的,所以如果你希望修改传入的指针,你需要传入该指针的地址,即需要用到二级指针。

然而在C++中,引用类型让我们可以直接传入变量本身,然后在函数内部进行修改,从而影响到函数外部的变量,所以无需使用二级指针。这就是为什么在C++中,传引用不必使用二级指针的原因。

引用的形参和const

将引用形参声明为const的理由有三个:

  • 使用const可以避免无意中修改数据的编程错误。
  • 使用const使函数能够处理const和非const实参,否则将只能接受非const实参。
  • 使用const,函数能正确生成并使用临时变量。

http://www.ppmy.cn/news/95424.html

相关文章

javascript基础七:说说你对Javascript中作用域的理解?

一、作用域 作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性 举个粟子 function myFunction(){let name小爱同学 } undef…

使用Docker安装Guacamole远程网关并配置录像回放

一、参考 guacamole配置guacamole使用Docker安装guacamole在浏览器中播放录像guacamole插件下载 二、环境 操作系统&#xff1a;Anolis OS 8.6 QU1 docker版本&#xff1a;23.0.5 docker compose版本&#xff1a;v2.17.3 docker-image-guacamole&#xff1a;1.5.1 docker-image…

计算节点与存储设备是如何连接的?

本文是《数据存储通识课》合集的一部分,本合集希望通过一系列文章科普数据存储相关技术内容。同时,本系列文章不仅仅是科普,还会进行有深度解析,理论结合实现,从代码实现层面进行剖析。欢迎关注“数据存储张”,老张是深耕存储十几载,就业于存储No1公司的资深工程师。 无…

【网络编程】详解UDP/TCP套接字的创建流程+守护进程

目录 一、网络编程套接字 1、一些概念 1.1源IP地址和目的IP地址 1.2端口号port 1.3TCP和UDP的性质 1.4网络字节序、IP地址类型转换、数据接收与发送函数、popen函数 2、UDP套接字 2.1UDP服务器创建流程 2.2UDP客户端创建流程 2.3创建socket套接字 2.4绑定套接字对应…

SpringBoot集成SpringSecurity从0到1搭建权限管理详细过程(认证+授权)

前言 最近工作需要给一个老系统搭建一套权限管理&#xff0c;选用的安全框架是SpringSecurity&#xff0c;基本上是结合业务从0到1搭建了一套权限管理&#xff0c;然后想着可以将一些核心逻辑抽取出来写一个权限通用Demo&#xff0c;特此记录下。 文章目录 前言1、SpringSecuri…

Debezium报错处理系列之六十九:Can‘t compare binlog filenames with different base names

Debezium报错处理系列之六十九:Cant compare binlog filenames with different base names 一、完整报错二、错误原因三、解决方法Debezium报错处理系列一:The db history topic is missing. Debezium报错处理系列二:Make sure that the same history topic isn‘t shared b…

DeepStream系列之yolov8部署测试

点击查看系列文章目录 0 背景 测试环境:deepstream 6.0.1,yolov8,A10 1 环境安装 推荐采用 conda 虚拟环境安装,避免环境污染 conda create -n yolov8 conda activate yolov8 下载 yolov8 官方源码,安装依赖 git clone https://github.com/ultralytics/ultralytics.gi…

什么是网络安全?如何让普通人简单的了解网络安全

一、介绍网络安全 可以介绍一下河南郑州的网络安全科技馆。网络安全科技馆设置个人安全、政企安全、社会安全、综合竞技四个主展区&#xff0c;帮大家普及网络安全知识。首先&#xff0c;可以从个人安全展区开始游览&#xff0c;了解我们身边的网络安全&#xff0c;原来网络安…