我有
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
}
Run Code Online (Sandbox Code Playgroud)
第三个函数plus_one_mut无法编译:error[E0369]: binary operation `+` cannot be applied to type '&mut i32'
为什么这个带有可变引用的函数无法编译?
正如错误消息所说:
二元运算 + 不能应用于类型 '&mut i32'
那是因为它没有实施。查看的文档i32,您将看到以下实现Add:
impl Add<i32> for i32impl<'a> Add<i32> for &'a i32impl<'a> Add<&'a i32> for i32impl<'a, 'b> Add<&'a i32> for &'b i32您需要取消引用&mut i32get to i32,它确实有一个Add实现。
为什么它没有那个实现?我不知道。也许你可以向 Rust 提交 PR 来添加它......就个人而言,我不记得曾经需要它。通常,如果你有一个,&mut T那是因为你想更新它,所以你会有像*foo += 1.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |