C++11 中的左值引用和右值引用的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11 中的左值引用和右值引用的区别相关的知识,希望对你有一定的参考价值。

参考技术A 准备知识

引用本质上是一个隐式指针,为对象的一个别名,通过 & 来实现。

左值是变量的地址,可以修改。

右值是变量存储的内容,可以修改,也可以不能修改。

变量的本质即存储空间的名称,编译后变为对应的地址。

分析区别

左值引用

T & a = 引用对象,显示的声明且初始化后,就相当于一个变量,由于拥有变量的相同的地址,使用也是与变量一样。

右值引用

T && a = 被引用的对象,一般不是显式的定义,用于传参和返回,与左值引用的区别,右值是一个临时变量且不变的,变量的所有权会转移,可以理解为,右值引用初始化后,被引用的对象消失,后面一般不再使用。

左值的详解

参考技术A

左值可以表示对象,即具有对应的可以由用户访问的存储单元(应特别注意和类风格面向对象中的对象——类的实例的区别;Java等语言的对象即使用此种说法;C的左值相当于Java中的“变量” )。正因为如此,用于取得对象的指针的内建操作符&要求操作数是左值。
左值表示存储在计算机内存的对象,与此相对的概念是右值(rvalue),习惯上统称为左值性(lvalue-ness) 。

以上是关于C++11 中的左值引用和右值引用的区别的主要内容,如果未能解决你的问题,请参考以下文章

5分钟搞懂C++左值引用和右值引用!

C11新特性右值引用&&

C++11:左值右值左值引用右值引用有什么区别?

如何评价 C++11 的右值引用(Rvalue reference)特性?

[C++11]右值和右值引用

左值和右值的区别