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("右值临时对象"))//右值移动拷贝

传过来的是将亡值,反正你要亡了。随着临时对象的构造就消失了,不如给我,用右值引用引用这,然后我给你一个空指针,临时对象析构的时候析构空指针,原来的给我

posted @   有志者事竟成1019  阅读(20)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示