引用的概念和使用方法
一、引用的概念
引用不是定义一个变量,而是给一个已有成员起一个别名
类型 &引用变量名 = 以定义的变量名
int a = 10;
int &b = a;
引用 的特点
1.一个变量可以有多个成员
2.引用必须初始化
3.引用只能在初始化的时候引用一次,不能改变在引用其他的变量
二、const 引用
1.const引用 可以为 非const变量 的别名
非const变量相当于可以对他进行读、写操作
而const引用,只能对他进行读,不能进行写操作
权限 读写->只读(权限可以缩小)
int a = 4;const int& b = a;cout << a << endl; //4cout << b << endl; //4
变量的值被改变时,引用的值同时也会改变,但是不能直接改变引用的值
a = 5;cout << a << endl; //5cout << b << endl; //5//b = 6; //不能对引用进行赋值
2. const变量只能用const引用,不能使用非const引用
const变量相当于只有读的权限,没有写的权限
非const引用既有读,又有写的权限
权限 :读->读写(不可以)
权限只能放大,不能缩小
const int c = 1;const int& d = c;//int& d1 = c;const int & d2 = 5;//常量具有常性,只有常引用可以引用常量
3.不同类型变量引用要用const
double a = 1.1;//int &b = a;const int& b1 = a;
a是double类型的,它要赋值给int类型会发生隐式类型转换
用a赋值给b时,会生成一个临时变量,即b引用的时这个带有常性的临时变量,所以要用const
三、引用做参数
1.值传递
void Swap1(int left, int right)
{int temp = left;left = right;right = temp;
}int main()
{int a = 10;int b = 20;cout << "a:" << a << endl;cout << "b:" << b << endl;Swap1(a, b);cout << "a:" << a << endl;cout << "b:" << b << endl;system("pause");return 0;
}
值传递不能改变a,b的值
2.引用传递
void Swap2(int& left, int& right)
{int temp = left;left = right;right = temp;
}int main()
{int a = 10;int b = 20;cout << "a:" << a << endl;cout << "b:" << b << endl;Swap2(a, b);cout << "a:" << a << endl;cout << "b:" << b << endl;system("pause");return 0;
}
3.指针传递
void Swap3(int* left, int* right)
{int temp = *left;*left = *right;*right = temp;
}int main()
{int a = 10;int b = 20;cout << "a:" << a << endl;cout << "b:" << b << endl;Swap3(&a, &b);cout << "a:" << a << endl;cout << "b:" << b << endl;system("pause");return 0;
}
引用传递和值传递
引用传递效率更高,值传递会有对象变量的拷贝,生成局部变量;
而引用是参数的一个别名,本身不占内存,所以开销小。
四、引用做返回值
1、正常的值返回
int Add(int a, int b)
{int c = a + b;return c;
}
int main()
{int a = 10;int b = 20;int ret = Add(a, b);//int& ret = Add(a, b); //不能用非const的引用,因为Add函数返回的c是一个临时变量const int& ret = Add(a, b);cout << ret;system("pause");return 0;
}
Add函数为值返回,它返回的是c的一个具有常性的临时变量,c出了作用域以后会销毁,所以要在前面加const;
2.引用做返回值
int& Add(int a, int b)
{int c = a + b;return c;
}
int main()
{int a = 10;int b = 20;int& ret = Add(a, b);cout << ret;system("pause");return 0;
}
注:尽量不要返回临时变量的引用,如果不是临时变量,则可以用引用返回
因为临时变量出了作用域以后就会销毁,临时变量的引用相当于它的别名,变量销毁了以后,引用就会指向不确定的内存
引用的概念和使用方法相关推荐
- Java总结13 Lambda表达式 和 方法引用 的概念与应用
一.Lambda表达式 一种代码简洁又抽象的表达方式,它能够在一个方法要调用某个接口的抽象方法前,对其要调用的抽象方法实现重写. 1.Lambda使用条件 1.必须要保证它是某个接口中唯一的一个抽象方 ...
- java中的正则表达式捕获组与引用的概念
今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个 "(([1-9]\\d?)\\s){2}$2&q ...
- vba 字典_VBA中字典的基础概念及调用方法
这节的内容,我们介绍下字典的基本概念和调用方法. 字典: 字典(Dictionary)是微软Windows脚本语言中的一个很有用的对象,由具有唯一性的关键字(Key)和它的项(Item)联合组成. 就 ...
- IDEA中的Project与Module的概念及使用方法
IDEA中的Project与Module的概念及使用方法 概念 Project Module 使用方法 将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性 父工程复 ...
- 织梦引用html,html直接引用vue和element-ui的方法
短视频,站群系统,自媒体,达人种草一站服务 这篇文章主要介绍了html直接引用vue和element-ui的方法,本文通过实例代码给大家介绍的非常详细,采集软件,对大家的学习或工作具有一定的参考借鉴价 ...
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...
IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...
- UIImageView图片视图的基本概念和使用方法
IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法(博客地址: http://blog.csdn.net/developer_jiangqq ) Author:hmjiangqq ...
- git错误“无法推送一些引用到xxx“的解决方法
git错误"无法推送一些引用到xxx"的解决方法 参考文章: (1)git错误"无法推送一些引用到xxx"的解决方法 (2)https://www.cnblog ...
- 2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)
文章目录: 1.定点数移位运算 (1)算术移位 (2)逻辑移位 (3)* 循环移位 2.定点数加减法运算 (1)原码加减 (2)补码加减 为什么机器中使用补码运算呢? 3.符号扩展 (1)正数符号扩展 ...
最新文章
- c++ 实例精通(1)
- python笔记:load_ext autoreload
- faster-rcnn中添加Mask中的RoiAlign层,使回归框更精确( roi_align_layer.cu:240] Check failed: error == cudaSuccess *)
- vue 动态添加路由
- 大学生活没钱你会学习还是打工? C2 翻译有感
- 12个开放平台大家一起来玩
- 图解路由器:这玩意儿能连接全世界的网络?
- 基于FPGA的ROM-VGA图像处理(老师好帅系列)
- Argo Rollouts 实现蓝绿/金丝雀发布
- 计算机视觉城市排名,计算机视觉技术量化城市变迁
- WinUsb_ReadPipe和WinUsb_WritePipe函数功能理解
- 连接tcp服务器出现的问题及解决方法
- DIB迪博数据库(2000-2018年)
- 游戏辅助制作核心--植物大战僵尸逆向之天上下钻石(五)
- 用Python实现四叉树(quad tree)
- CHOPS 音乐驱动动画
- 信息系统项目采购管理范文
- 注册会计师如何复习?(考过的人经验分享)
- TH-600电力远动报文规约分析仪
- D92-02-ASEMI低压降款超快恢复二极管