MST

星途 面试题库

面试题:Rust中Copy trait适用范围的理解与应用

请解释Rust中Copy trait的适用范围,并举例说明在哪些常见数据类型上会自动实现Copy trait,若自定义结构体想实现Copy trait需要满足什么条件?
44.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Rust中Copy trait的适用范围

Copy trait适用于那些在复制时可以简单地进行按位复制的数据类型。当一个类型实现了Copy trait,意味着它的实例在被赋值或作为参数传递时,会进行值的复制,而不是所有权的转移。

常见自动实现Copy trait的数据类型

  1. 基本数值类型:如i32u64f32f64等。例如:
let num1: i32 = 10;
let num2 = num1; // 这里num1的值被复制给num2
  1. 字符类型char。比如:
let c1: char = 'a';
let c2 = c1; // c1的值被复制给c2
  1. 布尔类型bool。示例:
let b1: bool = true;
let b2 = b1; // b1的值被复制给b2
  1. 元组(如果其所有元素都实现了Copy trait):例如(i32, u32)
let t1: (i32, u32) = (10, 20);
let t2 = t1; // t1的值被复制给t2

自定义结构体实现Copy trait的条件

自定义结构体要实现Copy trait,其所有成员都必须实现Copy trait。例如:

struct Point {
    x: i32,
    y: i32,
}
// 由于i32实现了Copy trait,Point结构体也可以实现Copy trait
impl Copy for Point {}
impl Clone for Point {
    fn clone(&self) -> Point {
        *self
    }
}
let p1 = Point { x: 1, y: 2 };
let p2 = p1; // p1的值被复制给p2

通常,如果结构体成员中包含像String(其内部持有堆上的数据且实现了Drop trait)或Vec<T>这类不实现Copy trait的类型,那么该结构体就不能实现Copy trait。