rust中&self、self、&self区别

self的类型,在给出调用者和方法名的前提下,Rust可以准确地推导出方法是否是只读的(&self),是否需要修改数据(&mut self),是否会获取数据的所有权(self)。这种针对方法调用者的隐式借用在实践中可以让所有权系统更加友好且易于使用。

如果我们在调用自身方法时用到自身数据,并保持调用外部的原有所有权,就可以使用&self来借用所有权这样的好处是调用者本身在外部任然有效,借用或者称引用或者称浅拷贝,他们的特点就是不会在方法内回收借用的地址数据,也不会转移原有的变量对值的持有者权,这相当于c++/java中的this但有有概念上的不同,rust避免转移所有权,而导致变量不可用,使用引用或者借用来对自定义结构体实现浅拷贝,这提高了程序的效率,另外还可用使用clone方法避免所有权转移,但该方法会触发深度拷贝,针对堆中的变量,而基本数据类型多和字面量类型大多在编译器就能确定,这些确定的往往被分配到栈中,在栈上的基本类型数据不存在转移权的区分,主要是因为栈上的读写性能相当高,在赋值时没必要限制,直接将右值拷贝一份赋值给左值性能性能影响不大。

相关推荐
愚者游世14 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
一 乐14 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
梵刹古音14 小时前
【C语言】 指针基础与定义
c语言·开发语言·算法
80530单词突击赢14 小时前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
Ekehlaft14 小时前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
rit843249914 小时前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
开源技术14 小时前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
Cult Of14 小时前
Alicea Wind的个人网站开发日志(2)
开发语言·python·vue
hdsoft_huge14 小时前
1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
vue.js·spring boot·后端
我找到地球的支点啦15 小时前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab