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}");
}
相关推荐
Star Learning Python13 分钟前
20260422-《我不擅长的生活》
笔记·生活
Fanfanaas15 分钟前
Linux 系统编程 进程篇(五)
linux·服务器·c语言·网络·学习·进程
Amazing_Cacao21 分钟前
品鉴师体系闭环:拒绝刻板记忆,打磨具备强悍迁移性的底层判断语言
笔记·学习
yi.Ist1 小时前
2025CCPC郑州邀请赛
c++·学习·算法·acm
HERR_QQ1 小时前
端到端课程自用 2课 动静态感知decoder
笔记·学习·自动驾驶
是上好佳佳佳呀1 小时前
【前端(八)】CSS3 属性值笔记:渐变、自定义字体与字体图标
前端·笔记·css3
Keep Running *1 小时前
Django_学习笔记
笔记·学习·django
今天你TLE了吗1 小时前
LLM到Agent&RAG——AI概念概述 第五章:Skill
人工智能·笔记·后端·学习
fox_lht2 小时前
8.3.使用if let和let else实现简明的程序流控制
开发语言·后端·算法·rust
不做无法实现的梦~2 小时前
显示屏和显卡驱动问题完整解决教程---ubuntu22.04安装显卡驱动解决显示屏黑屏幕问题
linux·学习