首页 > 其他分享 >深入思考右值引用

深入思考右值引用

时间:2023-04-26 11:55:23浏览次数:34  
标签:变量 右值 泛型 引用 思考 重载 函数

一般来说引用指的是左值引用,它存在的目的是为了给左值起个别名。在 C++ 新版本里面出了一个新的概念——右值引用。类比前面对左值引用的理解,右值引用是应该是对右值起的别名。不过这个所谓的右值引用已经不能用右值的方式来理解,往常对右值的认识一般以常量居多,但是这个被起别名的引用居然能做一些变量才有的操作,比如说对值本身的修改。这时候称它为变量吧,变量的诸多操作与特性它也不具备。所以说比起用右值来说,另一个更加形象的说法应该是——被阉割的变量。使用常量的这步操作我只能说是借腹生子了。

同类型的变量与阉割变量,虽然类型是相同的,但是从形式上分离了,变的可以区分了。那么这种区分是为了什么呢?是为了泛型编程,准确来说是函数重载方面的泛型编程,在往常的函数重载泛型编程中,是通过同名函数的参数类型与数量对真实调用的方法进行选择,不同类型与数量的参数意味着不同的方法。但是如果我们有这么一种需要,我们希望有着相同的数据类型与数量的同名函数也能够实现不同的调用方法(这种需求下文统称第二类函数重载),那么这时候我们就需要一个与同类型变量平行的变量来对调用方法进行区分,这个平行的变量就是我们上面提到的右值引用或者也可以称作是阉割变量。

对于以上泛型编程需要的一个熟知的例子就是移动语义。

不完美的泛型编程

通过这种被阉割的变量可以实现第二类函数重载,但是这种方法实现的第二类函数重载只有两种可能,因为只有一般变量与阉割变量这两种形式来对调用的方法进行区分,如果我们希望一个函数 `void fun(int n)` 能够实现对三种或者以上方法的重载则就没办法实现。

标签:变量,右值,泛型,引用,思考,重载,函数
From: https://www.cnblogs.com/cheng-liu/p/17355214.html

相关文章

  • 谈谈最近职场的一些思考
    今日鸡汤人生难得几回搏,此时不博待何时!告别校园,来到公司已经4个多月了,这四个月也真是快啊,真的是转眼之间,这日子,一天天的,简直太快。感觉前一阵还在学校呢,现在已经是职工了,不得不感叹岁月的流逝实在太快。在入职的这4个月里,自己经历过欢喜,也经历过挫折。公司的试用期是6个月,我用4个......
  • 左值、右值、左值引用和右值引用
     文章目录左值和右值什么是左值和右值?举例说明程序分析左值引用和右值引用什么是左值引用和右值引用?左值引用右值引用(important!!!)左值和右值的转换左值变右值右值变左值左值和右值什么是左值和右值?按照我们常规理解左值就是在等号左边的值,右值是等号右边的值。如果你要这么理......
  • 左值、左值表达式、左值引用 C++
     本文topics什么是左值和右值什么是左值表达式、右值表达式引用的分类之前学习Java的时候只记得在赋值表达式左边的就是左值,右边的就是右值。这个说法没有错,但今天又在C++中有学习到了关于左右值得概念,在此梳理了一些这些知识点。左值和右值左值:左值是一个对象或变量,可以代表......
  • 不同语言加载不同字号,设置到资源文件中,进行引用
    在资源文件夹创建一个类在App.xaml文件中引用这个类的空间命名,并把这个类添加到资源在页面中应用在使用其他语言时,开启新的子线程依然会使用区域语言.net4.5后使用可以一次性解决varculture=newCultureInfo("en-US");    CultureInfo.DefaultThreadCurrent......
  • C++基础3: 引用
    前言本篇首先回顾指针的概念,用C指针的缺陷引出C++中的引用,然后对引用进行说明比如,什么是引用?引用解决指针什么问题?引用的特性和使用等等1.指针什么是指针指针是内存单元的地址,口语中的指针实际上是指针变量,存储地址的变量#include<stdio.h>intmain(){ i......
  • 在JavaScript的if判断中,关于数组Array的相关思考
    结论:在if判断中,无法直接使用Array转Boolean的方法判断数组是否为空数组letarray=[];//中间进行N步操作之后//...if(array){ console.log("数组为空数组");}if(array==[]){ console.log("数组为空数组");}if(array==0){ console.log("数组为空数组");}if(array......
  • Eclipse打JAR包引用的第三方JAR包找不到的问题。
    我的程序里引用了别的JAR包在ECLIPSE里运行正常我想把我的程序打个JAR包打包的时候把引用的包也打进去了可运行程序确总是找不到我引用的包是不是路径的问题?急死我了快    解决方案:在你的项目文件夹下建一个META-INF文件夹里面新建一个MANIFEST.MF的文件内容大至如......
  • PHP中的引用参数的函数
    前言php的引用(就是在变量或者函数、对象等前面加上&符号)在PHP中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的。C语言中的指针里面存储的是变量的内容在内存中存放的地址,函数的引用返回多用在对象中引用参数的函数格式说明如下代码所示:voidfunName(array......
  • BeanUtils.copyProperties()深拷贝失效,对象值被引用改变
    之前就想一个深拷贝的解决方案,尝试用BeanUtils.copyProperties实现现在发现无法实现,两个变量引用位置相同最好自己实现一个工具类。之前在脉脉上看到有人提问,回答是用fastjson序列化解决的 Studentclone=JSONObject.parseObject(JSONObject.toJSONBytes(student),Stude......
  • 为什么再html页面引用element复选框,只有名称值,没有复选框
    问题描述我引入了el-checkbox之后,发现浏览器页面只是显示里面的文字,并没有显示出来我想要看到的相应样式问题解决经过一定的百度查证可知,使用Element-UI组件时,我们需要用div标签将其包裹起来;然后使用script标签定义一下div里面的id属性,然后才能够引用到这个el-标签,让其中的样......