C++11新概念:右值引用

Posted shinymood

tags:

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

C语言原始定义:在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。

左值:

  地址,内存中的具体空间,可以被读写;例如变量

  左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储

右值:

  数据,例如1,‘哈哈哈哈’

  右值指的是引用了一个存储在某个内存地址里的数据。不能通过引用或指针读写。用户无法控制这个右值。

一个区分左值和右值的方法是:能不能对这个值取地址。

 

return语句:

  按照以前C的说法,return语句如果是按值传递的话,return语句会把一个值复制一份再传递出去,那么对对象来说,复制就只能通过对象的赋值构造函数来实现了。

 

右值引用:

  关键字: &&

  int && a = 10;

  右值引用为一个非常量右值的引用。

左值引用:

  关键字:&

  左值引用为一个左值的引用。

右值引用的作用:

  为了解决C++一个非常著名的性能问题-----拷贝临时对象。

  如果我们知道一个对象是非常量右值,那我们在进行临时变量的拷贝时,就可以不用拷贝实际的数据(调用拷贝构造函数时不复制数据),而是‘窃取’指向这个对象的指针。(move转移)

以上是关于C++11新概念:右值引用的主要内容,如果未能解决你的问题,请参考以下文章

C++11之右值引用:移动语义和完美转发(带你了解移动构造函数纯右值将亡值右值引用std::moveforward等新概念)

c++11的右值引用移动语义

C++11 ——— 右值引用和移动语义

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

重新理解C11的右值引用

C++11的右值引用移动语义(std::move)和完美转发(std::forward)详解