"*value += how_much"与生锈的"*value += *how_much"?



在下面的rust代码中,为什么两个函数mutate_value()都使用和不解引用how_much参数?这不应该不工作,因为我添加了一个引用的值?

fn mutate_value(value: &mut i32, how_much: &i32) {
*value += how_much
}
// fn mutate_value(value: &mut i32, how_much: &i32) {
//    *value += *how_much
// }

fn main() {
let mut value = 5;
let how_much = 10;
mutate_value(&mut value, &how_much);
println!("value: {}", value);
}

i32,以及其他数字原语,为两个不同的右侧类型实现了AddAssign

  • &i32
  • i32

这两个函数分别使用其中的每一个。当AddAssignimps不相同时,您可以清楚地看到它。(游乐场)

#[derive(Debug, Clone, Copy)]
struct A(i32);
impl AddAssign for A {
fn add_assign(&mut self, other: A) {
println!("By value");
self.0 += other.0;
}
}
impl AddAssign<&A> for A {
fn add_assign(&mut self, other: &A) {
println!("By reference");
// The . operator dereferences
self.0 += other.0;
}
}
fn main() {
let mut a = A(4);
let b = A(6);
// By value
a += b;
let c = &b;
// By reference
a += c;
dbg!(a);
}

相关内容

  • 没有找到相关文章

最新更新