c++11的右值引用

本文介绍了C++中右值引用的概念,区分了左值引用和右值引用,重点阐述了右值引用在处理临时对象时的高效移动拷贝,以及在string拷贝构造函数中的应用,通过将亡值的使用提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值