rust 从转移说起

news2024/9/9 7:45:55

Rust 专门提出了所有权和转移的概念,第一次接触总感觉晦涩,不属于正常思维,但还是得耐下性子,观摩观摩 Rust 所谓的转移。

Rust 中,对大多数类型而言,给变量赋值、给函数传值或者从函数返回值,这些操作不会发生值复制,而是“转移”。所谓转移,就是原来的所有者让渡这个值的所有权给目标所有者,并变成未初始化状态。然后,由目标所有者控制这个值的生命期。

上面这段话是我抄的,绕来绕去的,我们结合简单的例子,通过 Rust 编译器的输出来认识 “move” 动作:

fn main() {
    let orders = vec!["183".to_string(), "136".to_string()];
    let tmp_a = orders;
    let tmp_b = orders;
}

上述的代码会编译报错,当然,重点不是报错:unused variable,重点是下面的截图。Vec 没有实现 Copy 特性,赋值 orders 的时候值发生了转移,赋值 tmp_a 的时候又发生了转移,赋值 tmp_b 的时候就报错了。如果在 Go 语言中,这样的赋值是完全没有问题的。

在这里插入图片描述

因为在给 tmp_a 赋值之后,orders 变成了未初始化的状态。未初始化的状态表示没有任何值,没有在堆或者栈上申请任何空间。类比 Go 语言的话,空的指针类型声明就属于位初始化的状态。例子中, orders 在第一次赋值完成之后,变成未初始化的状态,相当于清空了为 orders 分配的内存,后续的程序再也无法使用 orders。这样的处理方式,对我们编程真的有帮助吗?

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

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

相关文章

Eclipse显示层级目录结构(像IDEA一样)

有的小伙伴使用IDEA习惯了,可能进入公司里面要求使用eclipse,但是eclipse默认目录是并列显示,而不是层级显示。部分人用起来感觉十分不方便。我们可以更改一下设置。 1、打开eclipse,找到这里 2、选择PackagePresentation 3、选…

支持跨语言、人声狗吠互换,仅利用最近邻的简单语音转换模型有多神奇

AI 语音转换真的越复杂越好吗?本文就提出了一个方法简单但同样强大的语言转换模型,与基线方法相比自然度和清晰度毫不逊色,相似度更是大大提升。 AI 参与的语音世界真神奇,既可以将一个人的语音换成任何其他人的语音,…

express框架中间件

1.介绍 说明:Express框架中间件是指在处理HTTP请求前或后对请求和响应进行处理的函数。具体而言,中间件可以: 执行一些公共的逻辑,比如身份验证、日志记录、错误处理等。修改请求和响应,比如缓存、压缩等。控制请求流…

ModaHub魔搭社区:基于 Amazon EKS 搭建开源向量数据库 Milvus

目录 01 前言 02 架构说明 03 先决条件 04 创建 EKS 集群 05 部署 Milvus 数据库 06 优化 Milvus 配置 07 测试 Milvus 集群 08 总结 01 前言 生成式 AI(Generative AI)的火爆引发了广泛的关注,也彻底点燃了向量数据库&…

Ubuntu中删除LibreOffice方法

目录 删除LibreOffice套件 删除所有与LibreOffice相关的软件包 删除与LibreOffice相关的配置文件 删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl Alt T来打开终端。 2、输入以下命令以卸载LibreOffice套件: sudo apt-get remove libreoffice* 删…

[管理与领导-7]:新任管理第1课:管理转身--从技术业务走向管理 - 管理常识1

目录 第1章 管理基本概念 1.1 什么是管理? 1.2 管理的要素与职能 第2章 管理是什么? 2.1 以终为始 2.2 资源的优化配置 2.3 分而治之:分目标、分任务、分权力、分利益 2.4 目标明确 2.5 优先级 2.6 知人善用,人尽其才 …

【零基础入门学习Python---Python与其他技术的整合之快速入门实践】

🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜…

2023和鲸夏令营创作活动【黄金价格分析预测】

2023和鲸夏令营创作活动【黄金价格分析预测】 文章目录 2023和鲸夏令营创作活动【黄金价格分析预测】一、项目背景二、数据说明三、数据预处理四、数据探索性分析五、构建LSTM模型预测1、构建LSTM模型2、绘制loss的变化曲线3、进行预测 一、项目背景 本项目的目标是分析并预测…

SpringBoot——在测试阶段验证Web表现层的接口是否正常

验证请求状态 之前我们实现了在测试环境中开启Web环境,并且在测试阶段发送虚拟请求,并看到了返回的结果,这次我们不止要看他的请求结果,还要看他的请求过程和请求状态 匹配请求状态 首先就是查看请求的状态。主要介绍的就是一个…

基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

实现步骤&#xff1a; ESP32 开启 WiFi AP 模式创建 WiFi 热点定义 IP 地址创建 TCP Server 测试代码如下&#xff1a; #include <WiFi.h> #include <WiFiClient.h>const char* ssid "cc123"; const char* password "espressif";WiFiServ…

Python-年会抽奖

#!/usr/bin/python # coding:utf-8 # Author:Rauckimport randomclass WhoIsLuck:"""年会抽奖"""# 奖品gift [{name: 一等奖, limit: 3, desc: 泰国5日游手术费报销},{name: 二等奖, limit: 6, desc: iPhone14手机},{name: 三等奖, limit: 30, …

【Linux OS】华为openEuler操作系统与openGauss数据库安装及使用入门

华为openEuler操作系统与openGauss数据库安装及使用入门 1、软件下载1.1、openEuler1.2、openGauss1.3、Data Studio 2、系统安装2.1、创建虚拟机2.2、安装操作系统2.3、登录系统 3、数据库安装及设置3.1、数据库安装3.2、数据库管理3.3、数据库设置 4、数据库访问4.1、Navicat…

Redis:IO多路复用深度解析

目录 一、Multiplexing&#xff08;IO多路复用&#xff09;1.是什么2.能干嘛3.Reactor设计模式4.select, poll, epoll 都是I/O多路复用的具体的实现4.1 select方法4.2 poll方法4.3 epoll方法4.4 三个方法对比 5.5种 I/O 模型总结6.为什么3个都保有 一、Multiplexing&#xff08…

关于如何使用 python 下载 json 格式数据

本章节内容节自《python编程从入门到实践》第十六章&#xff0c;我们将从网络上下载数据&#xff0c;并对数据进行可视化。就可以对其进行分析甚至观察其规律和关联。 学习目标 我们将访问并可视化以下两种常见格式存储的数据&#xff1a; CSV 使用 Python 模块 CSV 来处理以 C…

SpringBoot整合EasyExcel 3.x

文章目录 1 EasyExcel 3.x1.1 简介1.2 引入依赖1.3 简单导出1.3.1 定义实体类1.3.2 自定义转换器1.3.3 定义接口 1.4 简单导入1.5 复杂导出1.5.1 引言1.5.2 自定义注解1.5.3 定义实体类1.5.4 数据映射与平铺1.5.5 自定义单元格合并策略1.5.6 定义接口 1 EasyExcel 3.x 1.1 简介…

string容器语法

文章目录 string容器string基本概念本质&#xff1a;string和char * 区别&#xff1a;特点&#xff1a; string构造函数示例 string赋值操作示例&#xff1a; string字符串拼接示例&#xff1a; string查找和替换示例&#xff1a; string字符串比较示例&#xff1a; string字符…

第六章 rabbitmq高可用集群

在服务之间会采用mq进行消息通信,而rabbitmq本身也如同consul一样,如果只有一个节点那么就可能出现宕机的问题,并且基于mq的特点我们是可以在多个服务之间使用同一个mq来相互通信,因此高可用的架构设计就必不可少 1、rabbitmq集群方案 主备 远程 镜像 多活 构建 2、…

[uni-app]设置运行到微信小程序

1、设置微信小程序开发工具路径 2、检查微信小程序开发工具是否开启了服务端口 服务端口要是没有开启&#xff0c;会报 initialize。 3、在uni-app开发工具中点击运行微信开发者工具&#xff0c;微信开发工具运行成功。

Spark架构体系

StandAlone模式是spark自带的集群运行模式&#xff0c;不依赖其他的资源调度框架&#xff0c;部署起来简单。 StandAlone模式又分为client模式和cluster模式&#xff0c;本质区别是Driver运行在哪里&#xff0c;如果Driver运行在SparkSubmit进程中就是Client模式&#xff0c;如…

谷歌Med-PaLM 2霸榜医学问答领域

谷歌IO大会上&#xff0c;谷歌CEO桑达尔・皮查伊&#xff08;Sundar Pichai&#xff09;向全世界AI开发者发布了谷歌最新的大型语言模型&#xff08;LLMs&#xff09;PaLM 2&#xff0c;作为对标OpenAI最新大模型GPT-4的竞品&#xff0c;PaLM 2展现出了强大的多语言和推理能力。…