当前位置: 首页 > news >正文

C++引用(起别名)

0.引用的概念 


引用不是新定义一个变量,而是给已存在变量取了一个别名,从语法的角度来说编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如说你的名字和外号指的都是你本人。


void Test()
{int a = 10;int& ra = a;//<====定义引用类型printf("%p\n", &a);printf("%p\n", &ra);
}

通过代码我们发现实际上引用名的地址和变量的地址是相同的。注意:引用类型必须和引用实体是同种类型的。

1.引用的特性

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

这里就体现了引用和指针的一些区别了,首先指针可以有空指针,可以不初始化,而引用必须要初始化,也不允许对空起别名。指针的指向是可以改变的,而引用不允许改变其引用的实体。

下面是一些容易出错的代码:

void Test()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d;
}

2.引用的应用

1.函数传参时可以采取引用的方式。

void Swap(int& a, int& b)
{int temp = a;a= b;b = a;
}

2.引用可以做函数返回值。

int& Count()
{
static int n = 0;
n++;
// ...
return n;
}

3.总结

以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。所以引用做函数参数时没有临时拷贝可以提高效率。

其实在底层上来说引用是按照指针方式来实现的。但是sizeof(引用)的大小是引用类型的大小而sizeof(指针)的大小是4/8个字节。而且不存在二级引用的说法。

感谢观看~

http://www.lryc.cn/news/194715.html

相关文章:

  • Ubuntu:VS Code IDE安装ESP-IDF【保姆级】(草稿)
  • 子序列(All in All, UVa 10340)rust解法
  • AI时代,当项目经理遇到ChatGPT,插上腾飞的翅膀!
  • Springboot项目中加载Groovy脚本并调用其内部方代码实现
  • 为什么要做数据可视化
  • 0基础学习VR全景平台篇 第108篇:全景图细节处理(下,航拍)
  • linux查看文件内容命令more/less/cat/head/tail/grep
  • VBA窗体跟随活动单元格【简易版】
  • epiiAdmin框架注意事项
  • 数据仓库与ETL
  • Centos7安装Gitlab--gitlab--ee版
  • 主题教育问题清单及整改措施2023年-主题教育对照六个方面个人剖析材料
  • php新手实战:自定义书源下载api
  • 数据结构 - 5(二叉树7000字详解)
  • xshell使用方法(超详细)
  • 【数据库系统概论】第三章关系数据库标准语言SQL
  • 云计算是什么?学习云计算能做什么工作?
  • ES6 -- 模块化(CommonJS、AMD、ES Module)
  • c# xml 参数读取读取的简单使用
  • gym原来是这样用的
  • 百度SEO优化技巧与布局(提升网站排名的5种有效方法)
  • 文案配音软件哪个好?(适合新手使用)
  • excel映射xml方法
  • 2023/10/15
  • Linux系统中如何开启和配置OpenGauss数据库的远程连接
  • 【Docker】Docker网络及容器间通信详解
  • TikTok国际版 使用特网科技Bluestacks模拟器安装方法
  • 【Hello Algorithm】暴力递归到动态规划(四)
  • arm day 8
  • k8s-14 存储之volumes