MST

星途 面试题库

面试题:Rust中自定义类型结合整数溢出检测的设计与实现

设计一个Rust自定义结构体,结构体中包含多个整数类型字段。要求在对结构体进行某些操作(例如对所有整数字段求和)时,能有效检测可能发生的整数溢出,并通过合适的错误处理机制(如Result类型)返回结果。请详细说明设计思路并给出完整代码实现。
26.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义结构体:在Rust中使用struct关键字定义包含多个整数类型字段的结构体。
  2. 操作实现:实现一个方法,用于对结构体中的所有整数字段求和。
  3. 溢出检测:在求和过程中,使用checked_add方法来检测整数溢出,该方法在发生溢出时返回None,否则返回Some(sum)
  4. 错误处理:使用Result类型来返回操作结果。如果没有发生溢出,返回Ok(sum);如果发生溢出,返回Err并携带相应的错误信息。

代码实现

// 定义一个包含多个整数类型字段的结构体
struct MyNumbers {
    num1: i32,
    num2: i32,
    num3: i32,
}

// 为MyNumbers结构体实现方法
impl MyNumbers {
    // 定义一个方法对所有整数字段求和,并处理可能的溢出
    fn sum_fields(&self) -> Result<i32, &'static str> {
        let sum = self.num1.checked_add(self.num2)
                           .and_then(|partial_sum| partial_sum.checked_add(self.num3))
                           .ok_or("Integer overflow occurred during summation");
        sum
    }
}

fn main() {
    let numbers = MyNumbers { num1: 10, num2: 20, num3: 30 };
    match numbers.sum_fields() {
        Ok(sum) => println!("Sum: {}", sum),
        Err(e) => println!("Error: {}", e),
    }

    let overflow_numbers = MyNumbers { num1: i32::MAX, num2: 1, num3: 0 };
    match overflow_numbers.sum_fields() {
        Ok(sum) => println!("Sum: {}", sum),
        Err(e) => println!("Error: {}", e),
    }
}