实际上做了什么?

siy*_*iyu 4 rust

我想了解Rust的参考.

fn main() {
    let x: i32 = 0;
    println!("{}", x+1); // this works
    println!("{}", (&x)+1); // this works
    //println!("{}", (&(&x))+1); // but this failed
}
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

    1
    1
Run Code Online (Sandbox Code Playgroud)

什么是&真正做到?为什么可以&x添加,就像它是一个整数但不是&(&x)

She*_*ter 5

&获取操作数的引用.这可以被认为是找到存储该值的存储器地址.

您的示例有效,因为+使用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
Run Code Online (Sandbox Code Playgroud)

也就是说,您可以添加任何引用和非引用对.但是,您的第二个示例将具有两个级别的间接(&&i32),并且该Add特征未针对该多个级别的引用实现.