c++11的右值引用
1.什么是右值引用
C++98首次提出了引用,引用就是给一个对象取别名,这个叫左值引用
C++11提出了右值引用,右值引用通常是常量,表达式,函数的返回值等的临时变量
左值引用和右值引用都是取别名
只不过,左值引用主要是给变量取别名,而右值引用主要是给常量取别名
//eg:
int a=10;
int &x=a;//这里就是左值引用
int && s=10;//这里就是右值引用
int &&s1=a+10;//右值引用
左值不一定是左边的值,右值不一定是右边的值
左值通常是变量(const 的左值引用除外)
例如:
const int &a=10;//此时就可以用左值引用来引用常量。
var code = "43fddf55-e9d6-488e-8d79-f7870fac566c"
所以左值引用并不一定只能引用常量,只是通常引用变量
右值引用也是如此,并不一定只能是常量
int a=10;
int&& s=move(a);//右值引用能引用move后的左值(即变量)
2.右值引用的将亡值(用例string拷贝构造函数的的现代写法)
C++11又将右值分为:纯右值和将亡值
纯右值:基本类型的常量和临时对象
将亡值:自定义类型的临时对象(重要作用)
在拷贝构造函数的时候,如果要拷贝一个临时的对象,那么效率就会很低,需要创建一个临时对象,然后再深拷贝
但是如果用右值引用,来进行移动拷贝,那么效率高的多
比如:
string(const string& s ){//这里就是左值引用的深拷贝
strcpy(_str,s._str); }
string (string&& s):_str(nullptr){
swap(s,nullptr);//直接将临时对象变成自己的了 }
//例子就是
string s1(string("右值临时对象"))//右值移动拷贝
传过来的是将亡值,反正你要亡了。随着临时对象的构造就消失了,不如给我,用右值引用引用这,然后我给你一个空指针,临时对象析构的时候析构空指针,原来的给我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本