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