左值引用与右值引用
左值引用和右值引用的区别?右值引用的意义
-
左值引用是对左值的引用,右值引用是对右值的引用
-
左值右值的概念
-
左值:可以在等号左边,能够取地址,并且具备名字的(左值可以放在右边,只要能够放在等号左边就是左值)(const左值引用能指引右值,局限是不能修改这个值)
-
-
-
解引用(操作符是* 例如:
*ptr
。解引用是指将指针转换为实际值或对象的过程。)也可以作为左值
-
-
右值:只能在等号右边,不能够取地址,不具备名字的(关键是如何区分右值)(右值指的是不具备“可修改状态”的表达式)
-
纯右值:字面值
-
int i = 10,这个10是纯右值
-
返回非引用类型的函数调用
-
后置自增/自减
-
-
-
将亡值:c++11引入的一个与右值引用(移动语义:
移动语义是指通过移动资源的所有权而不是复制资源,来提高代码性能的C++语言特性
)相关的值类型 -
- 用将亡值来触发移动构造
注1
/移动赋值构造并进行资源转移,之后将调用析构函数注2
- 用将亡值来触发移动构造
-
-
左值右值的区别
-
-
-
左值引用
- 避免对象的拷贝,可以直接使用内容
- const左值引用能指引右值,局限是不能修改这个值
- 声明出来的左值引用或者右值引用都是左值
-
右值引用
- 意义:
- 实现移动语义
- 实现完美转发
- 通过std::move()实现指向左值
- 意义:
声明出来的左值引用或者右值引用都是左值,左值引用是对左值的引用,右值的引用是对右值的引用,两者都是引用,声明出来的变量都是左值,比如说int &a和int &&a中的a都是左值。const左值引用可以指向右值,const int &a就可以引用右值,但是不能修改这个值,因此需要右值引用解决这个问题右值引用也可以指向左值,可以通过move函数指向这个左值。
注1
移动构造函数
移动构造是一种特殊的构造函数,用于将一个对象的资源(比如内存)转移到另一个对象,同时避免不必要的内存拷贝,从而提高程序性能。通常情况下,移动构造函数会接受一个将亡值(即将被销毁的对象),并将其资源转移到一个新的对象中,然后将将亡值的指针置为null,避免其析构函数再次释放资源。
构造函数:
构造函数是一种特殊的成员函数,用于创建和初始化对象。当定义一个对象时,构造函数会自动调用来初始化对象的数据成员。
构造函数的作用可以总结为以下几点:
- 初始化对象的成员变量,确保对象在创建后的初始状态是正确的。
- 分配内存或资源,并对其进行初始化,如动态分配内存、打开文件、连接网络等。
- 对象创建时执行一些必要的操作,如日志记录、统计等。
- 可以提供默认参数,方便用户使用。
注2
析构函数的作用是在对象被销毁时自动执行清理操作,如释放对象所占用的内存等。当一个对象的生命周期结束时,C++编译器会自动调用其析构函数。
__EOF__

本文链接:https://www.cnblogs.com/LaChlanYang/p/17217775.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!