3
fn plus_one(x: &i32) -> i32 {
x + 1
}
fn plus_one_star(x: &i32) -> i32 {
*x + 1
}
fn plus_one_mut(x: &mut i32) -> i32 {
x + 1
}
fn plus_one_mut_star(x: &mut i32) -> i32 {
*x + 1
}
fn main() {
let a: i32 = 5;
let mut b: i32 = 5;
println!("{:?}", plus_one(&a));
println!("{:?}", plus_one_star(&a));
println!("{:?}", plus_one_mut(&mut b));
println!("{:?}", plus_one_mut_star(&mut b));
// I expect all to print '6' as I never actually mutate b
}
第三个功能,plus_one_mut
,失败,编译:error[E0369]: binary operation `+` cannot be applied to type '&mut i32'
为什么与可变引用这个函数编译失败?
奇怪的是'x.add(1)'适用于所有情况,但是...在这种情况下,可能会有强制手段? –
@PaoloFalabella我不确定何时*胁迫*是正确的;但是,我会假设[自动解除引用](http://stackoverflow.com/q/28519997/155423)即将发挥作用。 – Shepmaster
因此,在这种情况下,'&T'的行为就像'T'。一般来说,我应该在使用它们之前解除引用所有不可变的引用吗?或者为'&T'实现大多数'T'方法是非常常见的? – turbulencetoo