rust学习笔记

一、常用trait

Clone&Copy

rust 复制代码
pub trait Clone: Sized {
    fn clone(&self) -> Self;
}

pub trait Copy: Clone { }

|-------|------|------------|--------------------|
| Clone | Copy | let y = x; | let y = x.clone(); |
| | | 发生移动 | 编译报错 |
| √ | | 发生移动 | 发生拷贝 |
| √ | √ | 发生拷贝 | 发生拷贝 |

Clone:可以理解为深拷贝,例如String的clone就是将栈上的指针和堆上的字符都拷贝一份。

若某类型实现了Clone,则y=x仅仅只是移动所有权,若想做深拷贝必须显式调用.clone()

Copy:逐比特拷贝。 因此Copy不能被重载。

若某类型实现了Copy,则y=x就进行的是拷贝而非移动。

若结构体的每个字段都实现了Copy,rust编译器不会自动为该结构体生成Copy trait,即y=x仍然会发生移动。只有加上#[derive(Copy, Clone)]才行。

不可变引用&T也是实现了Copy的。就算T不可Copy,&T也是可Copy的。

可变引用&mut T不可Copy。

实现了Copy就不能实现Drop,实现了Drop就不能实现Copy。

二、遍历

按值遍历(该种方式会将v移动掉,后续无法再使用)

rust 复制代码
let v = vec![1, 2, 3, 4, 5];
for x in v { // 等价于v.into_iter()。 x是i32类型
    println!("{x}");
}

按不可变引用遍历:

rust 复制代码
let v = vec![1, 2, 3, 4, 5];
for x in &v { // 等价于v.iter()。 x是&i32类型
    println!("{x}");
}

按可变引用遍历:

rust 复制代码
let mut v = vec![1, 2, 3, 4, 5];
for x in &mut v { // 等价于v.iter_mut()。 x是&mut i32类型
    println!("{x}");
}
相关推荐
CappuccinoRose15 分钟前
CSS 语法学习文档(十五)
前端·学习·重构·渲染·浏览器
山岚的运维笔记44 分钟前
SQL Server笔记 -- 第63章:事务隔离级别
数据库·笔记·sql·microsoft·oracle·sqlserver
智者知已应修善业1 小时前
【排列顺序判断是否一次交换能得到升序】2025-1-28
c语言·c++·经验分享·笔记·算法
HuDie3401 小时前
AI产品经理课程笔记
人工智能·笔记·产品经理
香芋Yu1 小时前
【大模型面试突击】04_Embedding与表示学习
学习·面试·embedding
RoyLin2 小时前
Rust 编写的 40MB 大小 MicroVM 运行时,完美替代 Docker 作为 AI Agent Sandbox
后端·架构·rust
lingliang2 小时前
Web3学习笔记:Day2-Solidity基础语法
笔记·学习·web3
前路不黑暗@3 小时前
Java项目:Java脚手架项目的阿里云短信服务集成(十六)
android·java·spring boot·学习·spring cloud·阿里云·maven
寒秋花开曾相惜3 小时前
(学习笔记)2.2 整数表示(2.2.3 补码编码)
c语言·开发语言·笔记·学习
CappuccinoRose3 小时前
CSS 语法学习文档(十七)
前端·css·学习·布局·houdini·瀑布流布局·csspaintingapi