Rust 中的隐式所有权

Edo*_*rdo 5 ownership rust borrowing

我希望以下代码由于过期而无法编译,但它可以工作。

fn main() {
    let x;
    {
        let y = &13;
        x = y;
    }
    println!("{}", x); 
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let x;
    {
        let y = &13;
        x = y;
    }
    println!("{}", x); 
}
Run Code Online (Sandbox Code Playgroud)

复合类型的相同示例会按照我的意愿引发错误。

fn main() {
    let x: &Box<i32>; 
    {
        let y = &Box::new(13);
        x = y; 
    }
    println!("{}", x); 
}
Run Code Online (Sandbox Code Playgroud)
13
Run Code Online (Sandbox Code Playgroud)

一个典型的活生生的例子也给出了一个错误:

fn main() { 
    let x;
    {
         let y = 13;
         x = &y; 
    }
    println!("{}", x); 
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let x: &Box<i32>; 
    {
        let y = &Box::new(13);
        x = y; 
    }
    println!("{}", x); 
}
Run Code Online (Sandbox Code Playgroud)

在处理原始类型时,Rust 似乎通过所有权而不是借用来自动管理分配。有谁知道在这种情况下它是否正确,为什么?不幸的是,我没有找到任何答案。