rust中&self、self、&self区别

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

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

相关推荐
AllFiles3 分钟前
Kubernetes PVC 扩容全流程实战:从原理到操作详解
后端·kubernetes
AllFiles10 分钟前
Linux 网络故障排查:如何诊断与解决 ARP 缓存溢出问题
linux·后端
꧁Q༒ོγ꧂10 分钟前
算法详解(三)--递归与分治
开发语言·c++·算法·排序算法
ganshenml16 分钟前
【Android】 开发四角版本全解析:AS、AGP、Gradle 与 JDK 的配套关系
android·java·开发语言
我命由我1234517 分钟前
Kotlin 运算符 - == 运算符与 === 运算符
android·java·开发语言·java-ee·kotlin·android studio·android-studio
少云清19 分钟前
【接口测试】3_Dubbo接口 _Telnet或python远程调用Dubbo接口
开发语言·python·dubbo·接口测试
盒子691021 分钟前
【golang】替换 ioutil.ReadAll 为 io.ReadAll 性能会下降吗
开发语言·后端·golang
Aeside124 分钟前
揭秘 Nginx 百万并发基石:Reactor 架构与 Epoll 底层原理
后端·设计模式
alonewolf_9927 分钟前
Java类加载机制深度解析:从双亲委派到热加载实战
java·开发语言
追梦者12328 分钟前
springboot整合minio
java·spring boot·后端