c++ 左值、右值、右值引用、左值引用

c++里一切值必须属于左值、右值两者之一。
左值:一切变量(包括用const修饰的变量)、对象、包括引用都属于左值;
右值:一切字面值(可以是宏),临时无名对象(函数返回值),表达式(如a+n)。
说明一下:函数返回值,返回的是某一个类型的值,并不是返回变量。

左值并不是说能放在"="左边的值就是左值
虽然用const修饰的变量其值不能改变,但是它仍是左值

一、左值引用

首先,引用仅仅是为变量或对象取别名,因此不占用新的内存空间,也就不可能构建新对象。
    基本用法:type& 引用名 = 左值表达式;
 const type& 引用名 = 右值表达式
    注意事项:
    1.左值引用仅仅为变量或对象取别名,必须在定义时赋值,因为只有值或

对象存在时,才有意义为它绑定别名。
    2.当左值引用绑定值或对象后,就一直代表这该变量或对象,不能再绑定

其它变量或对象。"从一而终"。

引用数组:

语法:类型 (&引用名)[数组中元素数量]=数组名;

引用指针:

语法:类型 *&引用名=指针名;//可以理解为:(类型*) &引用名=指针名,即将指针的类型当成类型*

二、右值引用
    基本用法:type&& 引用名 = 右值表达式;
    注意:
    1.右值引用同样需要在定义的时候赋值,和左值引用一样;但是右值引用

同样也遵循"从一而终"。
    2.右值引用不能绑定左值表达式,但是通常用std::move()将左值强制转

换成右值,再绑定如:
    int a;
    int&& r = a;  //编译失败
    int&& r1 = std::move(a);  //正确


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值