一、引用的概念

引用不是定义一个变量,而是给一个已有成员起一个别名

类型 &引用变量名 = 以定义的变量名

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;
}

注:尽量不要返回临时变量的引用,如果不是临时变量,则可以用引用返回

因为临时变量出了作用域以后就会销毁,临时变量的引用相当于它的别名,变量销毁了以后,引用就会指向不确定的内存

引用的概念和使用方法相关推荐

  1. Java总结13 Lambda表达式 和 方法引用 的概念与应用

    一.Lambda表达式 一种代码简洁又抽象的表达方式,它能够在一个方法要调用某个接口的抽象方法前,对其要调用的抽象方法实现重写. 1.Lambda使用条件 1.必须要保证它是某个接口中唯一的一个抽象方 ...

  2. java中的正则表达式捕获组与引用的概念

    今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2&q ...

  3. vba 字典_VBA中字典的基础概念及调用方法

    这节的内容,我们介绍下字典的基本概念和调用方法. 字典: 字典(Dictionary)是微软Windows脚本语言中的一个很有用的对象,由具有唯一性的关键字(Key)和它的项(Item)联合组成. 就 ...

  4. IDEA中的Project与Module的概念及使用方法

    IDEA中的Project与Module的概念及使用方法 概念 Project Module 使用方法 将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性 父工程复 ...

  5. 织梦引用html,html直接引用vue和element-ui的方法

    短视频,站群系统,自媒体,达人种草一站服务 这篇文章主要介绍了html直接引用vue和element-ui的方法,本文通过实例代码给大家介绍的非常详细,采集软件,对大家的学习或工作具有一定的参考借鉴价 ...

  6. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  7. UIImageView图片视图的基本概念和使用方法

    IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法(博客地址: http://blog.csdn.net/developer_jiangqq ) Author:hmjiangqq ...

  8. git错误“无法推送一些引用到xxx“的解决方法

    git错误"无法推送一些引用到xxx"的解决方法 参考文章: (1)git错误"无法推送一些引用到xxx"的解决方法 (2)https://www.cnblog ...

  9. 2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)

    文章目录: 1.定点数移位运算 (1)算术移位 (2)逻辑移位 (3)* 循环移位 2.定点数加减法运算 (1)原码加减 (2)补码加减 为什么机器中使用补码运算呢? 3.符号扩展 (1)正数符号扩展 ...

最新文章

  1. c++ 实例精通(1)
  2. python笔记:load_ext autoreload
  3. faster-rcnn中添加Mask中的RoiAlign层,使回归框更精确( roi_align_layer.cu:240] Check failed: error == cudaSuccess *)
  4. vue 动态添加路由
  5. 大学生活没钱你会学习还是打工? C2 翻译有感
  6. 12个开放平台大家一起来玩
  7. 图解路由器:这玩意儿能连接全世界的网络?
  8. 基于FPGA的ROM-VGA图像处理(老师好帅系列)
  9. Argo Rollouts 实现蓝绿/金丝雀发布
  10. 计算机视觉城市排名,计算机视觉技术量化城市变迁
  11. WinUsb_ReadPipe和WinUsb_WritePipe函数功能理解
  12. 连接tcp服务器出现的问题及解决方法
  13. DIB迪博数据库(2000-2018年)
  14. 游戏辅助制作核心--植物大战僵尸逆向之天上下钻石(五)
  15. 用Python实现四叉树(quad tree)
  16. CHOPS 音乐驱动动画
  17. 信息系统项目采购管理范文
  18. 注册会计师如何复习?(考过的人经验分享)
  19. TH-600电力远动报文规约分析仪
  20. D92-02-ASEMI低压降款超快恢复二极管

热门文章

  1. 数据要素市场的基础制度供给:要素市场
  2. python drf_drf,_Python教程 | 登博教程
  3. calabash-android 环境问题
  4. CAD制图查询CAD图纸中的点坐标
  5. 微信打开网站被提示已停止访问该网页该怎么解决
  6. 实验二 创建显示系统进程的信息的proc模块
  7. msckf-vio编译缺少random_numbers
  8. libcurl错误代码
  9. css样式calc根据其他属性设置样式值。
  10. TCP/IP协议和OSI七层模型