C++11:右值引用

2023-11-08

新特性目的

右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:

  • 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
  • 能够更简洁明确地定义泛型函数。

左值、右值

        在C语言中,我们经常会提起左值、右值这样的称呼。一个最为典型的判别方法就是,在赋值表达式中,出现在等号左边的就是左值,而在等号右边的,则称为右值。如:

int b = 1;
int c = 2;
int a = b + c;

       在这个赋值表达式中,a就是一个左值,而b+c则是一个右值。

       不过C++中还有一个被广泛认同的说法,那就是可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值。那么这个加法赋值表达式中,&a是允许的操作,但是&(b+c)这样的操作则不会通过编译。因此a是一个左值,而(b+c)是一个右值。
       C++( 包括 C) 中所有的表达式和变量要么是左值,要么是右值。通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效。
       相对于左值,右值可以表示字面常量、表达式、函数的非引用返回值等。

左值引用、右值引用

左值引用就是对一个左值进行引用,右值引用就是对一个右值进行引用的类型。

左值引用和右值引用都属于引用类型,无论是声明一个左值还是右值引用,都必须立即进行初始化,而其原因可以理解为引用类型本身自己并不拥有所绑定对象的内存,只是该对象的一个别名

左值引用:

int &a = 2;       //err,左值引用只能引用左值
int b = 2;        
const int cb = 3;
const int &c = b;
const int &e = cb; 
const int &f = 2; 

“const 类型 &”为万能的引用类型,他可以接受非常量左值、常量左值、右值对其进行初始化。
右值引用,使用&&表示:

int && r1 = 22;
int x = 5;
int y = 8;
int && r2 = x + y;

通常情况下,右值引用是不能够绑定到任何的左值的

int c;
int && d = c; //err

通用引用,这是Scott Meyers自创的一个词,通俗地讲,通用引用是这样一个东西:它既能绑定左值又能绑定右值,在代码中一般长这个样子:T&&。通用引用有两个条件:

  • 必须精确地满足“T&&”这种形式,不能加const等修饰。
  • T必须是通过推断得到的,最常见的例如模板参数。

测试示例:

#include <iostream>
using namespace std;

void process_value(int & i) //参数为左值引用
{
    cout << "LValue processed: " << i << endl;
}

void process_value(int && i) //参数为右值引用
{
    cout << "RValue processed: " << i << endl;
}

int main()
{
    int a = 0;
    process_value(a); //LValue processed: 0
    process_value(1); //RValue processed: 1

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11:右值引用 的相关文章

  • 基于java的物资管理系统设计与实现

    基于java的物资管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的物资管理系统设计与实现的研究背景和动机在于提高物资管理系统的效率和质量 使得物资管理系统更加便捷 快速 准确 从而提高物资管理的水平 该系统的设计和实现主要围
  • 什么是充放电振子理论?

    CHAT回复 充放电振子模型 Charging Reversal Oscillator Model 是一种解释ENSO现象的理论模型 这个模型把ENSO现象比喻成一个 热力学振荡系统 在这个模型中 ENSO现象由三个组成部分 充电 Char
  • 让CHAT介绍下V2ray

    CHAT回复 V2Ray是一个网络工具 主要用于科学上网和保护用户的网络安全 它的名字源自Vmess Ray 光线 通过使用新的网络协议 为用户提供稳定且灵活的代理服务 下面是一些V2Ray的主要特性 1 多协议支持 V2Ray 提供了大量
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 【计算机毕业设计】二手图书交易系统

    随着世界经济信息化 全球化的到来和互联网的飞速发展 推动了各行业的改革 若想达到安全 快捷的目的 就需要拥有信息化的组织和管理模式 建立一套合理 动态的 交互友好的 高效的二手图书交易系统 当前的信息管理存在工作效率低 工作繁杂等问题 基于
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • 【gee】下载modis土地利用类型

    var china ee FeatureCollection projects assets china boundary var lc dataset ee ImageCollection MODIS 061 MCD12Q1 filter
  • js中关于字符串的创建和判断类型

    文章目录 创建方法 判断类型的技巧 区分 1 typeof 2 instanceof 共点 1 Object prototype toSt
  • 【硕士论文复现】可再生能源发电与电动汽车的协同调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 上层问题 1 2 下层问题 2 运行结果
  • 【无迹卡尔曼滤波】不确定和间接测量的非线性动力系统识别研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • Android Navigation的四大要点你都知道吗?

    在JetPack中有一个组件是Navigation 顾名思义它是一个页面导航组件 相对于其他的第三方导航 不同的是它是专门为Fragment的页面管理所设计的 它对于单个Activity的App来说非常有用 因为以一个Activity为架构
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【固定翼飞行器】用于计算固定翼飞机空气动力学的紧凑涡旋格方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 2024年华为OD机试真题-分割均衡字符串-Python-OD统一考试(C卷)

    题目描述 均衡串定义 字符串只包含两种字符 且两种字符的个数相同 给定一个均衡字符串 请给出可分割成新的均衡子串的最大个数 约定字符串中只包含大写的 X 和 Y 两种字符 输入描述 均衡串 XXYYXY 字符串的长度 2 10000 给定的
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 7、使用IO流读取指定文件内容,并完成相关操作

    编程题目 7 从类似如下的文本文件中读取出所有的姓名 并打印出重复的姓名和重复的次数 并按重复次数排序 1 张三 28 2 李四 35 3 张三 28 4 王五 35 5 张三 28 6 李四 35 7 赵六 28 8 田七 35 示例代码
  • FM1722/02NL+STM32硬件SPI调试笔记

    1 介绍 FM17XX 系列通用非接触读卡机芯片是复旦微电子股份有限公司设计的 基于 ISO14443 标准的系 列通用非接触卡读卡机芯片 采用 0 6 微米 CMOS EEPROM 工艺 FM17XX 系列读卡机芯片可分别支持 13 56
  • vi编辑文件时查找字符串

    原文地址 http vieri blog 51cto com blog 1950953 373639 使用vi编辑器编辑长文件时 常常是头昏眼花 也找不到需要更改的内容 这时 使用查找功能尤为重要 一 常规查找 方法如下 1 命令模式下输入
  • PTA 基础编程题目集 7-20 打印九九口诀表 C语言

    PTA 基础编程题目集 7 20 打印九九口诀表 C语言 下面是一个完整的下三角九九口诀表 本题要求对任意给定的一位正整数N 输出从11到NN的部分口诀表 输入格式 输入在一行中给出一个正整数N 1 N 9 输出格式 输出下三角N N部分口
  • ❤️【数据结构】之单链表的增、删、查、改(C语言实现)看一遍就会!!!

    文章目录 前言 作者简介 一 单链表 二 1 单链表结构 2 创建新节点 3 单链表的头插 2 单链表的尾插 3 单链表的头删 4 单链表的尾删 5 找到某个值的位置 6 在任意值前面插入值 7 删除任意位置的值 8 打印链表 9 主函数
  • Elasticsearch基本操作

    1 数据格式 Elasticsearch是面向文档型数据库 一条数据在这里就是一个文档 为了方便理解 我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行类比 这里 Types 的概念已经被逐渐弱化 El
  • 联机手写汉字识别,基于新型RNN网络结构的方法

    本文简要介绍2019年4月Pattern Recognition录用论文 RecognizingOnline Handwritten Chinese Characters Using RNNs with New Computing Arch
  • Unity的Input.GetAxis()的返回值

    Unity的Input GetAxis float moveHorizontal Input GetAxis Horizontal 水平的向左是 1 向右是1 静止返回值是0 float moveVertical Input GetAxis
  • 使用boost::range模块进行反转操作的相关测试程序

    使用boost range模块进行反转操作的相关测试程序 在C 中 使用第三方库可以帮助我们更方便地进行各种操作 boost库是一个受欢迎的C 库之一 提供了许多功能强大的模块 其中 boost range模块为我们提供了一组用于操作范围的
  • 一线大厂的企业云原生成本优化实践指南

    胡忠想 星汉未来联合创始人 CPO 读完需要 18分钟 速读仅需 6 分钟 1 前言 近年来 公有云 混合云等技术在全球迅速发展 云的普及度越来越高 Docker Kubernetes DevOps Service Mesh 等云原生技术蓬
  • 软件测试常见面试题

    文章目录 1 你的测试职业发展是什么 2 你认为测试人员需要具备哪些素质 3 你为什么能够做测试这一行 4 测试的目的是什么 5 测试分为哪几个阶段 6 单元测试的测试对象 目的 测试依据 测试方法 7 怎样看待加班问题 8 结合你以前的学
  • 【Python数据科学手册】Pandas——二、Pandas对象简介

    文章目录 二 Pandas对象简介 1 Pandas的Series对象 1 Serise是通用的NumPy数组 2 Series是特殊的字典 3 创建Series对象 2 Pandas的DataFrame对象 1 DataFrame是通用的
  • Spring Oauth2-Authorization-Server jwt 认证

    Spring Oauth2 Authorization Server jwt 认证机制 基于 spring security oauth2 authorization server 0 2 3 配置 资源服务器配置 Bean Securit
  • 全鲸董事长韩耀宁受邀出席第十九届中国科学家论坛,发表重要演讲

    9月18日 第十九届中国科学家 国际 论坛在京隆重开幕 来自全国各地行业的院士 科学家 教授 学者 科技工作者以及2000多名各行业领军企业家出席了本次年度盛会 大会以 推动科技国际合作 提高我国科技创新国际影响力 塑造创新发展新优势 为主
  • 用递归算法实现开平方根

    用递归算法实现开平方根 前言 本文是用手算平方根的解法 用python代码实现 手算平方根方法学自西瓜视频李永乐老师 代码为个人原创 手算平方根方法 现在我们有一个非负数S 要求S的平方根 我们可以先将S拆成两个数相加 这两个数分别是小于等
  • Filter过滤器——javaweb

    介绍 Filter 过滤器 用来过滤网站数据 每次请求都会走一次过滤器 直到服务器关闭 Filter 实现步骤 导包
  • QT界面:控件随界面大小自适应变化

    在用QT做一个图像显示界面的过程中需要控件随着QT界面缩放进行自适应变化的问题 特此记录一下 环境 Win10 VS2015 QT5 1 拖拽控件 首先 新建一个QT GUI工程 在Qt Designer中调整界面大小并拖拽需要的控件 如图
  • Vue---Vue常用特性

    一 常用特性概览 表单操作 自定义指令 计算属性 过滤器 侦听器 声明周期 1 表单操作 2 表单域修饰符 number 转化为数值 trim 去掉开始和结尾空格 lazy 将input事件切换change事件
  • el-upload+额外的参数 , element上传功能组件及其参数的详解

    前言 我们使用 element ui 的时候 可能会有一个需求要给后台传入额外的值 我这边是遇到了 然后通过找到各种资料解决了 现在把我的upload的组件分享一下 可以实现导入 导出功能 导入的时候也会有额外的参数 这个是通过 gjlx
  • C++11:右值引用

    新特性目的 右值引用 Rvalue Referene 是 C 新标准 C 11 11 代表 2011 年 中引入的新特性 它实现了转移语义 Move Sementics 和精确传递 Perfect Forwarding 它的主要目的有两个方