面试题答案
一键面试// 定义Point结构体
struct Point {
x: i32,
y: i32,
}
fn main() {
// 创建Point实例
let p1 = Point { x: 10, y: 20 };
// 将p1赋值给p2
let p2 = p1;
// 解释:因为i32实现了Copy trait,Point结构体默认也实现了Copy trait
// 当执行let p2 = p1;时,Rust会将p1的内容按位复制一份给p2
// 此时p1和p2是两个独立的实例,修改p2不会影响p1
println!("p1: x = {}, y = {}", p1.x, p1.y);
println!("p2: x = {}, y = {}", p2.x, p2.y);
}
在这段代码中,i32
类型实现了 Copy
trait,因此 Point
结构体也自动实现了 Copy
trait。当执行 let p2 = p1;
时,Rust 使用复制语义,将 p1
的内容按位复制给 p2
,从而创建了一个新的独立实例 p2
。这意味着 p1
和 p2
拥有相同的值,但它们是两个不同的实例,对 p2
的修改不会影响 p1
。