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}");
}
相关推荐
sprite_雪碧13 分钟前
笔记:考研机试 —— 进制转换类问题
笔记·考研
ysa05103017 分钟前
运用map优化多次查询【Kadomatsu 子序列】
数据结构·c++·笔记·算法
苦瓜小生23 分钟前
【黑马点评学习笔记 | 实战篇 】| 10-用户签到+UV统计
笔记·后端·学习
_饭团23 分钟前
C 语言内存函数全解析:从 memcpy 到 memcmp 的使用与模拟实现
c语言·开发语言·c++·学习·算法·面试·改行学it
别催小唐敲代码23 分钟前
FastAPI 从零开始完整学习教程
学习·fastapi
24白菜头24 分钟前
第十五届蓝桥杯C&C++大学B组
数据结构·c++·笔记·学习·算法·leetcode·蓝桥杯
Engineer邓祥浩40 分钟前
JVM学习问题记录(1) IDEA2025设置JVM启动参数
jvm·学习
qcwl6642 分钟前
深入理解Linux进程与内存 学习笔记#3
linux·笔记·学习
-Springer-1 小时前
STM32 学习 —— 个人学习笔记10-1(I2C 通信协议及 MPU6050 简介 & 软件 I2C 读写 MPU6050)
笔记·stm32·学习
小陈phd1 小时前
多模态大模型学习笔记(二十二)——大模型微调全解:从全量调参到LoRA的参数高效训练实战
笔记·学习