我测试下面的代码:

fn main() {
    let tested = Some(5);
    testoption(tested);
    println!("the tested is {}", tested.unwrap());
}

fn testoption(p: Option<i32>) {
    println!("the argument is {}", p.unwrap());
}

调用函数后可以使用测试的变量.我认为它应该搬走.

那么,什么样的变量在函数调用后不会被移动呢?实现复制特征还是其他什么?

推荐答案

如果包装类型实现Copy,则Rust选项implement the Copy trait.实现此特征的类型会在分配时复制而不会移动,这就是为什么在调用testoption函数后仍然可以访问tested.

Rust相关问答推荐

如何在tauri—leptos应用程序中监听后端值的变化?""

如何访问Rust存储值的内存地址

在自身功能上实现类似移动的行为,以允许通过大小的所有者进行呼叫(&;mut;self)?

有没有更好的方法从HashMap的条目初始化 struct ?

这种获取-释放关系是如何运作的?

无法理解铁 rust &S错误处理

如何实现泛型枚举的`Serde::Desialize`特性

函数内模块的父作用域的访问类型

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

用于判断整数块是否连续的SIMD算法.

循环访问枚举中的不同集合

将Vec<;U8&>转换为Vec<;{Float}&>

Rust编译器似乎被结果类型与anyhow混淆

使用 select 处理 SIGINT 和子等待!无阻塞

为什么Rust编译器会忽略模板参数应具有静态生命周期?

push 方法是否取得所有权?

使用部分键从 Hashmap 中检索值

为什么基于 clap::Parser 读取的大量数字进行计算比硬编码该数字时慢?

在 Rust 中返回对枚举变体的引用是个好主意吗?

Rust 跨同一文件夹中文件的可见性