C++ 左值、右值、左值引用、右值引用


看什么都没有比看官方文档更棒
Rvalue Reference Declarator: &&

左值、右值

C++对于左值右值没有标准定义,但是有一个被广泛认同的说法:
可以取地址的,有名字的,非临时的就是左值;
不能取地址的,没有名字的,临时的就是右值;

左值通常是:变量,常量等等,能出现在赋值符号左侧(是指存在于单个表达式之外的对象)

右值通常是:表达式,数值等等,不能出现在赋值符号左侧(是一个暂时存在的值存在于单个表达式之内的对象)

左值引用

在汇编层面其实和普通的指针是一样的。
标准没有说引用具体要怎么实现,很多编译器的做法是用指针实现引用,所以引用在很多编译器上还是要占用内存的。

int a = 10;
int &b = a;

左值引用要求右边的值必须能够取地址,如果无法取地址,可以用常引用;

int &var = 10; //这样不可以,10不能取地址
const int &var = 10; //改用常引用即可,但这样只能读,无法通过引用修改数据了

右值引用

格式
类型 && 引用名 = 右值表达式;

右值引用是C++ 11新增的特性,所以C++ 98的引用为左值引用。右值引用用来绑定到右值,绑定到右值以后本来会被销毁的右值的生存期会延长至与绑定到它的右值引用的生存期。

int &&var = 10;

在汇编层面右值引用做的事情和常引用是相同的,即产生临时量来存储常量。但是,唯一 一点的区别是,右值引用可以进行读写操作,而常引用只能进行读操作。

总结

右值引用将左值与右值区分开来。它们可以帮助您通过消除不必要的内存分配和复制操作来提高应用程序的性能。它们还使您能够编写接受任意参数的函数的一个版本,并将其转发给另一个函数,就好像直接调用了另一个函数一样

参考来源

C/C++ 引用作为函数的返回值
c++——左值、右值、左值引用、右值引用
c++ 左值引用与右值引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值