MST

星途 面试题库

面试题:Rust 常函数与不可变引用的使用场景

请阐述在 Rust 中常函数(即函数参数为不可变引用)的常见使用场景,并举例说明如何在一个简单的结构体上定义和调用常函数,以保证数据的不可变性。
36.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

常函数常见使用场景

  1. 数据读取:当函数只需要读取数据,而不需要修改数据时,使用常函数可以保证数据的完整性和不可变性。例如,在实现一个计算某个数据集合统计信息(如平均值、总和等)的函数时,只需要读取集合中的数据,不需要修改它们。
  2. 借用数据:在 Rust 中,为了避免数据所有权转移带来的复杂性,常函数允许在函数中借用数据,使得函数可以使用数据而不获取所有权,函数调用结束后,数据的所有权仍归调用者。这在多个函数需要使用相同数据时非常有用。

示例代码

// 定义一个结构体
struct Point {
    x: i32,
    y: i32,
}

// 在结构体上定义常函数
impl Point {
    fn distance(&self) -> f64 {
        (self.x * self.x + self.y * self.y) as f64).sqrt()
    }
}

fn main() {
    let p = Point { x: 3, y: 4 };
    // 调用常函数
    let dist = p.distance();
    println!("The distance from the origin is: {}", dist);
}

在上述代码中:

  1. 定义了一个 Point 结构体,包含两个 i32 类型的字段 xy
  2. Point 结构体的 impl 块中定义了一个常函数 distance,它接受 &self 作为参数,表示对 Point 实例的不可变引用。函数内部计算并返回该点到原点的距离,在这个过程中不会修改 Point 实例的数据。
  3. main 函数中创建了一个 Point 实例 p,然后调用 p.distance() 计算距离,并打印结果。这个过程保证了 p 的数据不可变性。