rust中&self、self、&self区别

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

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

相关推荐
小江的记录本2 分钟前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试
FlyWIHTSKY10 分钟前
React 19 + Next.js 16(App Router)项目中集成 MSW
开发语言·javascript·vue.js
Mr.Daozhi15 分钟前
跨境电商选品完整流水线:Google Trends筛词+Meta广告分析,CLI工具设计实战
开发语言·爬虫·python·跨境电商·工具链·选品
多彩电脑16 分钟前
Swift里字符串的索引
开发语言·swift
SoftLipaRZC16 分钟前
C语言预处理详解:从宏定义到条件编译
c语言·开发语言
会周易的程序员16 分钟前
C++ 对象池深度解析:架构设计与实现原理
开发语言·c++·物联网·iot·aiot
我登哥MVP17 分钟前
Spring Boot 从“会用”到“精通”:Model-Map原理
java·spring boot·后端·spring·servlet·maven·mybatis
L_090721 分钟前
【C++】智能指针
开发语言·c++·智能指针
程序猿乐锅22 分钟前
【苍穹外卖|Day02】后台接口自测闭环:Token、DTO 与 yml 配置
java·开发语言