栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

右值:非左值。

1.引用

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

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

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

2.右值引用

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

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

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

3.move()

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

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

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

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

总结:

引用不能对右值;

例如: 不能int &a=b;

右值引用不能能对左值;

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

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

int a=10;

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

以上目前理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号