为何Rust中整数变量赋值给其他变量后仍可被使用?
Rust所有权:为什么整数赋值后原变量仍可使用?
先看你给出的代码示例:
let u_own = 3432; let d_own = u_own; println!("{}", u_own);
你遇到的这个情况,核心原因是整数类型属于Rust的Copy类型。
Rust里,实现了Copy trait的类型在赋值、函数传参等场景下,会自动复制一份值,而不是转移所有权。这类类型的复制成本极低,所以语言设计上直接默认复制,而非移动所有权。常见的Copy类型包括:
- 所有整数(i8、i32、u64等)、浮点数(f32、f64)类型
- 布尔类型
bool、字符类型char - 由Copy类型组成的元组(比如
(i32, bool))
如果换成非Copy类型(比如String),所有权转移的行为就会符合你的预期:
let u_own = String::from("hello"); let d_own = u_own; println!("{}", u_own); // 此处编译器会报错,因为String的所有权已转移给d_own
简单总结:
- Copy类型赋值时,复制值,原变量保留所有权,可继续使用
- 非Copy类型赋值时,转移所有权,原变量不可再访问
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

