面试中常被问到(十)左/右值引用

左/右值引用

  • 概念:

  1. 左值:能对表达式取地址,或匿名对象/遍历。可能出现在=左边,表达式结束后依然存在的持久对象
  2. 右值:不能对表达式取地址,或匿名对象。只能出现在=右边,表达式结束后就不在存在的对象(一般右值为常量,临时变量,匿名对象,局部变量等)
  • 左/右值引用区别:

  1. 左值可以寻址,右值不可以
  2. 左值可以被赋值,右值不可以被赋值,但可以给左值赋值
  3. 左值可变,右值不可变
  4. 普通引用只能引用左值,不能引用右值
  5. const引用既可以引用左值,又可以引用右值
  6. c++11右值引用只能引用右值,不能直接引用左值

因此关于左值与右值的区分不是很好区分,一般认为:
1. 普通类型的变量,因为有名字,可以取地址,都认为是左值。
2. const修饰的常量,不可修改,只读类型的,理论应该按照右值对待,但因为其可以取地址(如果只是const类型常量的定义,编译器不给其开辟空间,如果对该常量取地址时,编译器才为其开辟空间),C++11认为其是左值。
3. 如果表达式的运行结果是一个临时变量或者对象,认为是右值。
4. 如果表达式运行结果或单个变量是一个引用则认为是左值。

  • 目的&作用:

  1. 右值引用是C++11新特性,实现转移语义和精确传递
  2. 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率
  3. 能够更加简洁明确定义泛型函数
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HT . WANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值