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}");
}
相关推荐
rui锐rui10 分钟前
大数据学习6:Sqoop数据迁移工具
大数据·学习·sqoop
psybrain18 分钟前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
笑衬人心。43 分钟前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna3 小时前
Docker学习
学习·docker·容器
quant_19864 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
promising-w9 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥9 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机9 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui