< 返回我的博客

&&a

cybertheye 发表于 2024-04-25 16:23

rust playground

fn main(){
    let a = 1;
    println!("{:p}",&a);
    println!("{:p}",&&a);
    println!("{:p}",&&a);
}
/*
0x7ffe58e66c0c
0x7ffe58e66ca0
0x7ffe58e66cf0
*/

&a 还能理解,打印的其实就是 a所在内存单元的地址

&&a 他是不是分配了一个临时的空间,来存放&a,然后再去获得存放&a的内存单元的地址 因为两次打印出来的是不一样的地址

如果有一个 b=&a ,打印&b,好像更好理解一点

之所以想到这个问题,是因为在做 rustlings iterators5 的题目的时候

fn count_iterator(map: &HashMap<String, Progress>, value: Progress) -> usize {
    // map is a hashmap with String keys and Progress values.
    // map = { "variables1": Complete, "from_str": None, ... }
    //todo!();
    //   &Progress   &&Progress
    map.values().filter(|x| x == &&value).count()
}

这里的filter 里面的 closure函数,怎么去对比

values() 得到的是一个迭代器,每一个可迭代的item是一个 &'a V 类型 然后 filter 函数里面接受的

fn filter<P>(self, predicate: P) -> Filter<Self, P> 
where
    Self: Sized,
    P: FnMut(&Self::Item) -> bool,

这个P是的参数是&Self::Item , 所以导致了我上面写的 |x|中的x是 &&Progress 类型

但是 x==&&value 这样比,rustlings是通过了,可回到上面的 &&a的例子,他每次又打印出不一样,我又有点疑惑

x==&&value**x==value 哪个更好?

评论区

写评论
wwwwwwwwww 2024-05-14 10:57

前一段在项目里脑抽没注意自己写了&&,找了半天为什么值没传过来(&&打印出的地址竟然高概率一样)……

1 共 1 条评论, 1 页