引用是变量的别名。也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

1.创建引用

int i = 0;
int& r = i;//r是一个出初始化为i的整型引用,r和i的内存地址是相同的。

2. 引用和指针的区别

引用和指针很像,它们都不会创建副本,因此效率都很高。它们之间有三个主要的不同:

  • 不存在空引用。引用必须连接到一块合法的内存。指针可能传递一个 NULL 过来,因此在使用前必须检查有效性;引用则必然代表某个对象,不需要做此检查。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。
  • 选择成员的时候,引用使用点 . 来查找,而指针则使用 -> 来查找。

3.引用作为参数传递给函数

Time Time::Sum(const Time& t) const {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}

在一般函数中,会将实参的值复制给形参,在被函数使用。如果实参占用大量内存,会使得内存开销很大。传递引用,代码的功能相同,但是使用的内存更少,速度将更快。

4.引用作为函数返回值

警告:不要返回指向局部变量或临时对象的引用!函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据。

示例1:

Time Time::Sum(const Time& t) const {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}

上述代码创建了一个新的Time对象(sum),表示另外两个对象的和。返回对象将创建对象的副本。

如果返回对象为Time&,则引用的将是sum对象。由于sum对象是局部变量,在函数结束时被删除,因此引用将指向一个不存在的对象。使用但会类型Time意味着将在删除sum之前构造它的拷贝,调用函数将得到该拷贝。

示例2:

#include <iostream>
using namespace std; int& getValue(); int main ()
{
int& a = getValue();
cout << "a is " << a << endl;
return 0;
} int& getValue()
{
static int ret = 100;
return ret;
}

(1)以引用返回函数值,定义函数时需要在函数名前加 &
(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本

内容来自:

https://blog.csdn.net/wohu1104/article/details/108188895

《C++ Primer Plus》 p312

C++笔记(3)引用的更多相关文章

  1. WPF笔记 ( xmlns引用,Resource、Binding 前/后台加载,重新绑定) 2013.6.7更新

    原文:WPF笔记 ( xmlns引用,Resource.Binding 前/后台加载,重新绑定) 2013.6.7更新 1.xmlns Mapping URI的格式是 clr-namespace:&l ...

  2. [开发笔记]-“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误

    这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...

  3. C++学习笔记2——引用

    1. int ival = 1; int &refVal = ival; //引用必须初始化,且类型严格匹配 2. int ival = 1; int &refVal = ival; ...

  4. (C/C++学习笔记) 十三. 引用

    十三. 引用 ● 基本概念 引用: 就相当于为变量起了一个别名(alias), △与指针不同的是它不是一个数据类型 通过引用我们可以间接访问变量,指针也能间接访问变量,但引用在使用上相对指针更安全. ...

  5. PHP 笔记——文件引用

    1. 文件路径 "文件路径"指的是被包含文件所在的绝对路径或相对路径. 在相对路径中,"./"表示当前目录,"../"表示当前目录的上级目录 ...

  6. Java学习笔记-方法引用

    方法引用(Method Reference) 上一篇中记录了Lambda表达式,其可以创建匿名方法.当Lambda表达式只是调用一个存在的方法时,可以采用方法引用(JDK8具有的特性).如下: pub ...

  7. C++ 学习笔记之 引用

    一.定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 二.用法: 基本用法 例如: int & a = b; 引用作为函数返回值 先看一个例子: #inclu ...

  8. Java学习笔记day03_引用数据类型

    1.引用数据类型 步骤: 1. 导包   2. 创建引用类型变量 类型 变量名 = new 类型名();   3. 使用数据类型的功能 变量名.功能名(); 如Scanner类: import jav ...

  9. Visual Studio使用技巧笔记(引用程序集自动复制dll到引用项目目录)

    copy /y $(TargetPath) $(SolutionDir)\[您项目引用dll文件的目录]\$(TargetFileName) 例如:copy /y $(TargetPath) $(So ...

  10. Android笔记之引用aar

    把要引用的aar文件复制到目录app\libs中(我要引用的aar名为xybigdatasdk-release-out2.2.6.aar) 在build.gradle (Module: app)中添加 ...

随机推荐

  1. c# 多线程传值注意的地方

    前言 下面介绍多线程传值的几种方式,并说明注意点. 正文 static void Main(string[] args) { SampleTread thead = new SampleTread(1 ...

  2. leetcode:3. 无重复字符的最长子串

    3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子 ...

  3. Apsara Stack 同行者专刊 | 政企混合云技术架构的演进和发展

    简介: 现在,政企客户已进入到用云计算全面替换传统IT基础架构的攻坚阶段,混合云与传统架构的技术产品能力也正在经历全面的比较与评估.阿里云混合云平台首席架构师张晓丹分享IT架构技术深刻洞察,并对政企混 ...

  4. dotnet 6 已知问题 获取 CultureInfo.NumberFormat 可能抛出 IndexOutOfRangeException 异常

    本文记录一个 dotnet 6 已知问题,准确来说这是一个在 dotnet 5 引入的问题,到 dotnet 6.0.12 还没修.在获取 CultureInfo.NumberFormat 属性时,在 ...

  5. dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

    本文记录在 dotnet 6 的网络和在 .NET Framework 的行为的变更.在 dotnet 6 下,默认的网络请求在系统网络代理变更的时候,是不会动态切换代理的.例如在应用运行进行网络通讯 ...

  6. 习题8 #第8章 Verilog有限状态机设计-3 #Verilog #Quartus #modelsim

    3. 编写一个8路彩灯控制程序,要求彩灯有以下3种演示花型. (1) 8路彩灯同时亮灭: (2) 从左至右逐个亮(每次只有1路亮): (3) 8路彩灯每次4路灯亮,4路灯灭,且亮灭相间,交替亮灭. 在 ...

  7. python 打包成exe可执行文件

    一.pyinstall打包 代码编写完成,如何在没有python环境的电脑上运行?编写了一个GUI程序,如何把文件打包好,发给别人直接使用?其实最简单的办法就是把.py源文件,打包成可执行程序员exe ...

  8. Halo博客搭建小记

    准备工作 阿里云服务器,操作系统为CentOS 7.9.2009 x86_64(Py3.7.9) 宝塔面板 Nginx 1.24.0(用于反向代理) 已备案的域名 ssl证书(https访问) 参考官 ...

  9. 【深度学习】基础--NumPy

    因为深度学习会应用到我们大学时候学习的数学知识---线性代数.(矩阵当年想起来还是挺有意思的,有考研的经历都有感觉) 而在计算机里面如何展示矩阵的计算和应用,就需要运用到NumPy,是Python的一 ...

  10. 带你十天轻松搞定 Go 微服务系列全集+勘误

    官网手册: https://go-zero.dev/cn/ 文档说明: https://zhuanlan.zhihu.com/p/461604538 本地开发运行环境: https://github. ...