"*value += how_much" vs "*value += *how_much" 生锈?

问题描述 投票:0回答:1

在下面的 rust 代码中,为什么这两个函数

mutate_value()
在取消引用 how_much 参数和不取消引用 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);
}
pointers rust dereference
1个回答
0
投票

i32
,以及其他数字基元,为两种不同的右侧类型实现
AddAssign

你的两个函数分别使用了其中的每一个。当

AddAssign
impls 不相同时,您可以清楚地看到它。 (游乐场)

#[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);
}
© www.soinside.com 2019 - 2024. All rights reserved.