MST

星途 面试题库

面试题:Rust 结构体可变性与所有权和借用

假设有一个函数,接收一个结构体的引用作为参数。结构体内部有一个可变字段。请描述在函数内如何安全地修改这个可变字段,同时遵循 Rust 的所有权和借用规则。如果函数返回修改后的结构体,应该怎样设计函数签名和实现,以确保内存安全?
39.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 在函数内修改可变字段

    • 函数参数应使用可变引用。假设结构体定义如下:
    struct MyStruct {
        mutable_field: i32,
    }
    
    • 函数可以这样写:
    fn modify_struct(mut s: &mut MyStruct) {
        s.mutable_field += 1;
    }
    

    在这个函数中,mut s表示 s是一个可变引用,这样就可以安全地修改MyStruct结构体的mutable_field字段,遵循Rust的所有权和借用规则。

  2. 函数返回修改后的结构体

    • 函数签名和实现如下:
    struct MyStruct {
        mutable_field: i32,
    }
    
    fn modify_and_return_struct(mut s: MyStruct) -> MyStruct {
        s.mutable_field += 1;
        s
    }
    

    在这个函数中,参数 s采用值传递,这样函数获得了结构体的所有权。在函数内部修改mutable_field后,直接返回修改后的结构体。这种方式确保了内存安全,因为Rust的所有权系统会正确管理结构体的生命周期和内存释放。