gpt4 book ai didi

rust - 添加时对 i32 的不可变和可变引用有什么区别?

转载 作者:行者123 更新时间:2023-11-29 07:58:48 25 4
gpt4 key购买 nike

我有

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'

为什么这个带有可变引用的函数编译失败?

最佳答案

如错误信息所述:

binary operation + cannot be applied to type '&mut i32'

那是因为它没有实现。审查the documentation for i32 ,您将看到 Add 的这些实现:

  • impl Add<i32> for i32
  • impl<'a> Add<i32> for &'a i32
  • impl<'a> Add<&'a i32> for i32
  • impl<'a, 'b> Add<&'a i32> for &'b i32

您需要取消引用 &mut i32i32 ,它确实有一个 Add实现。

为什么没有那个实现?我不知道。也许您可以向 Rust 提交 PR 以添加它……就个人而言,我不记得曾经需要它。通常如果你有 &mut T这是因为你想要更新它,所以你会得到类似 *foo += 1 的东西.

关于rust - 添加时对 i32 的不可变和可变引用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com