C++ 左值与右值

1. 左值

  1. 能取地址 ;
  2. 能赋值

2.右值

  1. 不能赋值,不能取地址

例子: a = b+c
a是左值,b+c是右值,因为&a是正确的,而&(b+c)是错误的

int i =0; //i 是左值

int get()    //函数的返回值是纯右值
{
   return 0;
}


右值分为:将亡值与纯右值

1. 纯右值:

  • 常量与常表达式 ,如 1+3 , 2 ,‘c’,true等;
  • 非引用返回的函数的返回值;
  • lamda表达式,类型转换函数的返回值

2.将亡值:

  • 返回右值引用(T&&)的函数返回值;
  • std::move()的返回值
  • 转换为T&&的类型转换函数的返回值

注意:

  • 常量左值引用可以接受非常量左值,常量左值,右值对其进行初始化。而且在使用右值对其初始化的时候,常量左值引用还可以像右值引用一样将右值的生命期延长。
  • 非常量左值只能接受非常量左值对其进行初始化

在C++11中,所有的值必为左值,将亡值,纯右值之一。
详细参考:https://blog.csdn.net/hyman_yx/article/details/52044632

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值