左值,右值,左值引用,右值引用

左值和右值是C++中的概念,左值可以寻址并可被赋值,右值则不能。右值引用允许将右值转换为左值,主要用于优化,减少构造和析构的次数,提高程序效率。例如,通过右值引用可以直接绑定函数返回的临时对象,避免了额外的对象复制。

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

1、左值(lvalue):

可以长时间保存,可以存在于=左边的值,可以取地址;

2、右值(rvalue):

临时值,不能存在于=左边的值,不可以取地址。

常见的右值有:

	 1. 常量、临时变量(函数返回的临时对象).
	 2. 将亡值:生命周期即将结束
	 3. 匿名对象:创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量 

左值和右值的区别:

左值引用:左值引用得到的就是还是一个左值

	1 .左值可以寻址,而右值不可以。
	2 .左值可以被赋值,右值不可以被赋值,可以用来给左值赋值。
	3 左值可变,右值不可变(仅对基础类型适用,用户自定义类型右值引用可以通过成员函数改变)。

左值引用:

左值引用实际上是一种隐式的指针,它为对象建立一个别名,通过操作符&来实现,即一个&符号后面跟上一个变量名。
左值引用:引用的实体既可以是左值,也可以为右值
左值引用符号为 &

右值引用:

右值引用就是把右值变成左值,通常是在C++返回值上,对于自定子类的重复拷贝做了重要改善,大大提高了C++的效率。
右值引用:引用的实体只能是右值,不能引用左值
右值引用符号为 & &

	右值引用操作符为 “&&”;
	右值引用得到的是一个左值。
	右值引用通常将一个临时变量拿过来用。
	右值引用最主要的功能是解决的是自定义类重复构造冗余的问题。

虽然说右值引用不能引用左值,但是move函数可以实现

	int a = 3;
	int &&t = std::move(a);

右值引用有什么用呢?

根本目的是为了提高效率,减少调用函数的时的构造和析构

   当我们调用一个返回一个右值的函数ReturnValue()时,当函数返回后,函数返回的右值生命周期也就结束了。
   
   当我们使用T a = ReturnValue();
   这样的方式来接收时,会多一次对象的构造和析构,首先用函数返回值构造a,然后函数返回值生命期结束析构。
   
   但是当我们通过一个右值引用(如  T&& a = ReturnValue(); )来接收时,该右值有重新获生命,
   右值引用直接绑定了函数返回的右值,只要我们的右值引用a存在,该右值也同时存在,
   那我们再返回时就不需要再进行多余的构造和析构,从而减少了构造和析构的调用次数,提高了效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值