面试题答案
一键面试以下以Rust语言为例进行解答:
1. 定义结构体及函数实现(转移所有权)
struct MyStruct {
data: i32
}
fn process(mut s: MyStruct) -> i32 {
s.data += 1;
s.data
}
在调用process
函数过程中,所有权从调用者转移到函数process
内部。函数process
获得MyStruct
实例的所有权后,可以对其进行修改。函数返回值是i32
类型,它的所有权被返回给调用者。
2. 借用传入的MyStruct
实例而不转移所有权
struct MyStruct {
data: i32
}
fn process(s: &MyStruct) -> i32 {
s.data + 1
}
这里函数process
参数使用&MyStruct
,这是对MyStruct
实例的借用。这样调用者仍然保留MyStruct
实例的所有权,函数process
只能读取借用的数据,不能修改(如需修改,可以使用&mut MyStruct
)。函数返回值i32
的所有权被返回给调用者,而原MyStruct
实例的所有权在调用者手中不受影响。