大家好我是发哥,本期说说C++11右值引用。

右值引用可以从字面意思上理解,指的是以引用传递(而非值传递)的方式使用 C++ 右值。
在 C++ 或者 C 语言中,一个表达式(可以是字面量、变量、对象、函数的返回值等)根据其使用场景不同,分为左值表达式和右值表达式。确切的说 C++ 中左值和右值的概念是从 C 语言继承过来的。
左值的英文简写为“lvalue”,右值的英文简写为“rvalue”。很多人认为它们分别是"left value"、"right value" 的缩写,其实不然。lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 "read value",指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。
通常情况下,判断某个表达式是左值还是右值,最常用的有以下 2 种方法。
1、 可位于赋值号(=)左侧的表达式就是左值;反之,只能位于赋值号右侧的表达式就是右值。例如:
int num = 59;
59 = num; //错误,59 不能为左值
其中,变量 num 就是一个左值,而字面量 59 就是一个右值。C++ 中的左值也可以当做右值使用,例如:
int tmp= 130; // tmp 是一个左值
num = tmp; // tmp、num 都是左值,只不过tmp也可以当做右值使用
2、 有名称的、可以获取到存储地址的表达式即为左值;反之则是右值。
以上面定义的变量num、tmp 为例,num 和tmp 是变量名,且通过 &num 和 & tmp 可以获得他们的存储地址,因此 num 和tmp都是左值;反之,字面量 59、130,它们既没有名称,也无法获取其存储地址(字面量通常存储在寄存器中,或者和代码存储在一起),因此 59、130 都是右值。
注意,以上 2 种判定方法只适用于大部分场景。想对 C++ 左值和右值做深度剖析,感兴趣的网友可以自行研究。
今天就说到这,谢谢你的关注,记得点赞、评论和关注哦,后期会有更好的优秀作品呈现,你的支持是我创建继续创造优秀作品的动力。
明天早上六点我们继续再聊。


还没有评论,来说两句吧...