面试题答案
一键面试fn multiply_if_some(value: &Option<i32>) -> i32 {
match value {
Some(num) => num * 2,
None => 0,
}
}
函数参数使用引用的好处
- 避免所有权转移:如果参数直接传递
Option<i32>
,所有权会转移到函数中,调用者之后就不能再使用这个值。而使用引用,调用者仍然保留所有权,可以继续使用这个值,提高了值的复用性。 - 性能提升:传递引用避免了数据的复制,特别是对于大型数据结构,性能提升显著。
Option<i32>
虽然数据量小,但在处理大型数据时这种优势会更明显。
函数参数使用引用可能的风险
- 空指针风险:如果传递了一个空引用(
None
),并且在函数中没有正确处理,会导致运行时错误。在上述代码中通过match
对None
进行了处理,避免了这种风险。 - 生命周期问题:引用必须在其生命周期内有效。如果函数返回值的生命周期依赖于参数引用的生命周期,需要正确标注生命周期参数,否则会导致编译错误。在上述简单代码中,由于返回值不依赖于参数引用的生命周期,所以没有这个问题。