c++的右值引用和move()

首先区分什么是左值和右值。

左值:占内存空间,能对其取址(&)。

右值:非左值。

1.引用

引用是对一个变量起别名(不能对右值取引用)

    int a = 10,&b = a,c=b;

    cout<<&a<<' '<<&b<<' '<<&c<<endl;
    cout<<a<<' '<<b<<' '<<c<<endl;
  
00AFFAE0 00AFFAE0 00AFFAC8
10 10 10

2.右值引用

右值引用是对右值进行引用(不能对左值取引用);

感觉是脱裤子放屁。(目前无法理解)

不过对右值引用需要申请额外的内存空间存放右值。

3.move()

加上move才知道右值引用的用处。

move()对形参右值化(左值和右值都被当成右值)。

如果左边是右值引用,左值的右值引用不仅会赋右值,还会引用原来左值。

int a = 10,&&b =move(a),&&c=move(10);
 
    cout<<&a<<' '<<&b<<' '<<&c<<endl;
    cout<<a<<' '<<b<<' '<<c<<endl;
004FFE1C 004FFE1C 004FFD38
10 10 10

总结:

引用不能对右值;

例如: 不能int &a=b;

右值引用不能能对左值;

例如:不能int &&a=10;

右值引用+move=啥都能引用;

int a=10;

int &&b=move(a),&&c=move(10);

以上目前理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值