Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 在论点上,用&和*的变化来比较平等有什么区别?_Pointers_Rust - Fatal编程技术网

Pointers 在论点上,用&和*的变化来比较平等有什么区别?

Pointers 在论点上,用&和*的变化来比较平等有什么区别?,pointers,rust,Pointers,Rust,我编写了以下函数: fn test() { let xs = [b"AAA", b"BBB"]; let buf = b"AAA"; println!("{:?}", xs.iter().find(|&x| &x == &&buf)); } 这是可行的,但我很困惑,因为这些也有效: 普林顿!{:?},xs.iter.find |&x | x==&buf; 普林顿!{:?},xs.iter.find |&x |*x==buf; 这些变化之间

我编写了以下函数:

fn test() {
    let xs = [b"AAA", b"BBB"];
    let buf = b"AAA";
    println!("{:?}", xs.iter().find(|&x| &x == &&buf));
}
这是可行的,但我很困惑,因为这些也有效:

普林顿!{:?},xs.iter.find |&x | x==&buf; 普林顿!{:?},xs.iter.find |&x |*x==buf;
这些变化之间有什么区别?*和&显然与C中的行为非常不同。要理解上述内容,我需要理解这些运算符的细微差别吗?

相关的差异在于相等运算符的行为。x==y和&x==&y的语义是相同的:它们比较x和y

&x==&y将减摩至。PartialEq反过来具有一揽子实现

impl<'a, 'b, A, B> PartialEq<&'b B> for &'a A
where
    A: PartialEq<B> + ?Sized,
    B: ?Sized,
因此PartialEq::eq&&x,&&y调用PartialEq::eq*&&x,*&&y,这与PartialEq::eq&x,&y或x==y相同

fn eq(&self, other: & &'b B) -> bool { 
    PartialEq::eq(*self, *other) 
}