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}");
}
相关推荐
zhangrelay2 分钟前
ROS2 Lyrical 入门+进阶+精通+……
linux·笔记·学习·机器人·课程设计
babe小鑫4 分钟前
2026年大数据与计算机专业学习数据分析的技术价值
大数据·学习·数据分析
编程圈子4 分钟前
电机驱动开发学习3. 驱动原理与相关电路
驱动开发·学习
.千余7 分钟前
【C++】C++ map 与 multimap 完全指南:键值对容器详解
开发语言·c++·笔记·学习·其他
kisdiem9 分钟前
Reflexion:让 Agent 从错误中学习
学习
小满Autumn5 小时前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net
袁小皮皮不皮12 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
装不满的克莱因瓶12 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
星栈独行12 小时前
Makepad 应用如何读文件、调接口、保存数据
前端·程序人生·ui·rust·github
清辞85313 小时前
产品经理需求推进流程
大数据·深度学习·学习·产品经理