我试图理解 Rust 的引用。

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

我得到的:
    1
    1
& 实际上是做什么的?为什么可以像整数一样添加 &x 而不是 &(&x)

最佳答案

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

您的示例有效,因为 + 是使用 Add trait 实现的,它具有以下变体:

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

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

关于rust - & 实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30746212/

10-10 18:33