MST

星途 面试题库

面试题:Rust中引用比较规则基础及示例

在Rust中,简述引用的比较规则。假设有两个结构体 `Point { x: i32, y: i32 }`,分别创建两个该结构体的引用 `&Point`,如何正确比较这两个引用所指向内容的相等性,并写出示例代码。
28.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

引用的比较规则

在Rust中,引用本身的比较是按内存地址进行比较的。要比较引用所指向的内容,需要满足该内容实现了 PartialEqEq 特征。

比较结构体引用所指向内容的相等性

对于 Point 结构体,Rust默认不会为其实现比较相关的特征。如果要比较两个 &Point 引用所指向内容的相等性,需要为 Point 结构体实现 PartialEq 特征。

示例代码

#[derive(PartialEq)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let p1 = Point { x: 1, y: 2 };
    let p2 = Point { x: 1, y: 2 };

    let ref1 = &p1;
    let ref2 = &p2;

    if ref1 == ref2 {
        println!("The points are equal");
    } else {
        println!("The points are not equal");
    }
}

在上述代码中:

  1. 使用 #[derive(PartialEq)]Point 结构体自动派生 PartialEq 特征,这样就可以比较 Point 结构体实例的相等性。
  2. 创建两个 Point 实例 p1p2,并分别创建它们的引用 ref1ref2
  3. 使用 == 运算符比较 ref1ref2 所指向内容的相等性。因为 Point 实现了 PartialEq,所以可以进行这样的比较。