Rust 02.控制、引用、切片Slice

1.控制流

//rust通过所有权机制来管理内存,编译器在编译就会根据所有权规则对内存的使用进行
//堆和栈
//编译的时候数据的类型大小是固定的,就是分配在栈上的
//编译的时候数据类型大小不固定,就是分配堆上的
fn main() {let x: i32 = 1;{let y: i32 = 1;println!("x = {}", x);println!("y = {}", y);}{let s1 = String::from("hello");//s1.push_str(" world");println!("s1 = {}", s1); //String类型离开作用域的时候会调用drop方法let s2 = s1; //浅拷贝 只是拷贝了指针, 数据并没有拷贝println!("s2= {}", s2);//println!("s1= {}", s1); //s1在被copy后会自动释放指针内存,所以会报错//clone 深拷贝数据let s3 = s2.clone();println!("s3= {}", s3);println!("s2= {}", s2);}

在这里插入图片描述

控制权

fn takes_ownership1(some_string: String){println!("{}", some_string);
}fn takes_ownership2(some_string: String) -> String{println!("{}", some_string);some_string
}fn makes_copy(i: i32) {println!("i = {}", i);
}fn main() {let s = String::from("hello");//takes_ownership1(s); //s在调用函数后被drop,后续无法打印其值//println!("{}", s);let s2 = takes_ownership2(s);println!("{}", s2);let x = 5;makes_copy(x);println!("{}", x);println!("Hello, world!");
}

2.引用

//引用: 用法&,
//让我们创建一个指向值的应用,但是并不拥有它,因为不拥有这个值,所以,当引用离开其值指向的作用域后也不会被丢弃
fn calcute_length(s: &String) ->usize {s.len()
}//借用:&mut 可以修改字符串,同时不会执行drop操作
fn modify_s(s: &mut String) {s.push_str(", world");
}fn dangle() -> &String {let s = String::from("hello");&s
}fn main() {let mut s1 = String::from("hello");//在任意给定时间,有了可变引用之后不能再有不可变引用let r1 = &s1;let r2 = &s1;println!("{}, {}", r1, r2);let r3 = &mut s1;r3.push_str(", world");//println!("{}, {}", r1, r2); 由于r3为 可变引用, r1,r2不能在这里使用,必须在r3之前使用//引用不能为空,dangle()中给s赋值结束后就drop了,最终返回了空指针,这是不合法的//let ref_s = dangle();//println!("{}", ref_s);
}

Slice

//1、字符串slice是String中一部分值的引用
//2、字面值就是slice
//3、其它类型slice
fn main() {let s = String::from("hello world");let h = &s[0..5]; 	//区间[0,5)let h = &s[0..=4]; 	//区间[0,4]let h = &s[..=4]; 	//区间[0,4]let h = &s[..5]; 	//区间[0,5)println!("h = {}", h);let w = &s[6..11];  //区间[6,11)let w = &s[6..=10]; //区间[6,10]let w = &s[6..];  	//区间[6,s.len())let w = &s[..]; 	//区间[0,s.len())println!("w = {}", w);//let ss = String::from("你好");//let w1 = &ss[0..1];let a = [1, 2, 3, 4];	let sss = &a[1..3];		//取a中[1,3)的元素println!("sss = {}", sss[0]);	//a[1]println!("sss = {}", sss[1]);	//a[2]println!("len = {}", sss.len());	//长度为2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片格式转换:快速将PNG转换为JPG的步骤

在我们的日常生活中,经常会遇到需要改变图片格式的情况,有时候,我们可能需要将PNG格式的图片转换为jpg格式,以适应不同的需求和应用场景;本文将介绍哥实用的方法和工具,帮助您顺利将png图片转换为jpg格式。 压缩图网站…

面试经验分享 | 蓝队面试经验

关于蓝队面试经验 1.自我介绍能力 重要性 为什么将自我介绍能力放在第一位,实际上自我介绍才是面试中最重要的一点,因为护网面试并没有确定的题目,让面试官去提问 更多是的和面试官的一种 “交谈” ,面试的难易程度也自然就取决…

【第三方登录】Twitter

创建应用 APPID 和 相关回调配置 重新设置api key 和 api secret 设置回调和网址 还有 APP的类型 拿到ClientID 和 Client Secret 源码实现 获取Twitter 的登录地址 public function twitterUrl() {global $db,$request,$comId;require "inc/twitter_client/twitte…

Springboot整合瀚高

需要下载highgo驱动,然后将jar包打入进自己本地maven中 下载地址: highgi6.2.4 1.打开jar包所在的文件,然后在该文件夹中打开命令窗口(或者先打开命令窗口,然后cd到jar所在文件夹) install-file -Dfile:jar包名Dart…

腾讯VS网易:一场不见终局的游戏未来之战

国内游戏霸主腾讯最近赚足了眼球。 总体上看,腾讯手握“游戏社交”两大王牌,最近发布的财报十分亮眼,其2023年总营收和净利润分别同比增长10%和36%,展现了互联网巨头的强劲活力。 然而巨头亦有焦虑,增值服务营收同比…

Prompt Engineering的4 种方法

此为观看视频 4 Methods of Prompt Engineering 后的笔记。 从通用模型到专用模型,fine tuning(微调)和prompt engineering(提示工程)是2种非常重要的方法。本文深入探讨了prompt engineering的4种方法。 首先&#…

23届嵌入式被裁,有什么好的就业建议?

最近看到了一个提问,原话如下: 本人23届毕业生,就业方向嵌入式软件,坐标深圳,工作3月公司裁员,目前接近12月开始找工作。 boss上投递简历,校招岗,比较有规模的好公司基本已读不回&am…

你的 Python 代码需要解释一下了!

Python 是一种相对简单的编程语言。它主要以解释型语言著称,这意味着每行代码都要通过解释器逐行执行。不过在某些时候,将 Python 代码翻译成计算机可以理解的内容,然后再逐行执行,可以减少繁琐。 在这种情况下,编译器…

VRAY渲染设置大神参数(建议收藏)

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 公用:输出大小:一般小图50…

小白一次过软考高级(信息系统项目管理师)秘籍,请收藏!!!

作为一位软考老司机,我觉得我还是有资格说一说的。 我的考试成绩: 高级软考考试基础信息: 考试科目:总共分为3科,综合知识、案例分析、论文 成绩:满分75分,45分及格,需同时通过3科…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理:解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式(Regular Expression)最早…

LangChain入门:3.调用OpenAI的聊天机器人-入门

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API,通过向其发送请求来生成回复文本。 首先,导入ChatOpenAI类,这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

python基于django的高校迎新系统 flask新生报到系统

系统的登录界面和业务逻辑简洁明了,采用一般的界面窗口来登录界面,整个系统更加人性化,用户操作更加简洁方便。本系统在操作和管理上比较容易,还具有很好的交互性等特点,在操作上是非常简单的。因此,本系统可以进行设计…

Go——结构体

Go语言中没有类的概念,也不支持类的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 一. 类型别名和自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型,如string,整型,…

聚道云助力:易快报CDP无缝对接,登录同步一步到位!

一、客户介绍 某企业咨询有限公司是一家专注于为企业提供全方位、高质量咨询服务的领先机构。该公司致力于将先进的管理理念和实践经验与企业实际需求相结合,助力企业实现可持续发展。无论是战略规划、组织优化、人力资源管理,还是市场营销、财务管理等…

GEE:将分类特征和标签提取到样本点,并以(csv/shp格式)下载到本地

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上,下载用于机器学习分类或者回归的样本点数据,样本点数据携带了分类特征和标签信息,可以以csv格式或者SHP格式。 结果如下图所示, 文章目录 一、核心函数1.1 采样1.2 下载函数二、代码链接三、完整代码…

产品推荐 | 基于 ALINX XILINX ZYNQ-7000 XC7Z020 多网口 FPGA开发板

01、产品概述 此款开发板使用的是Xilinx公司的Zynq 7000系列的芯片,型号为XC7Z020-2CLG484I,5 路千兆以太网接口,支持多网口高速数据交换数据处理存储,视频传输处理以及工业控制等。内核 CPU搭载双核 ARM CORTEX-A9;在…

git提交和回退

目录 一. git 提交二. git commit 后准备回退,尚未 git push三. git add 添加多余文件 撤销操作四. 更改 Git commit 的默认编辑器五. 撤销某个commit的变更六. 回退到之前的commit状态总结: 一. git 提交 git pull # 更新代码 git status # 查看代码状…

云原生最佳实践系列 4:基于 MSE 和 SAE 的微服务部署与压测

方案概述 云原生应用平台为基于 Spring Cloud / Dubbo 开发的微服务应用提供了完善的能力支撑,例如服务注册发现、Serverless 无服务部署、实例弹性伸缩、微服务链路跟踪、全链路压力测试等,应用能够方便快捷的部署在阿里云上。 阿里云原生产品完全兼容…

SEO 的未来:GPT 和 AI 如何改变关键词研究

谷歌Gemini与百度文心一言:AI训练数据的较量 介绍 想象一下,有一个工具不仅可以理解错综复杂的关键字网络,还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方,以我们从…