地址范围:寿命不够长

2024-02-12

我对这两个看似相似的程序的结果感到惊讶。

fn main() {
    let y: &int = &31i;
    println!("My number is {}.",*y)
}
//Output
My number is 31.

但是,这段代码给了我一个错误。

fn main() {
    let y: ∫
    y = &31i;
    println!("My number is {}.",*y)
}
// Output on Rust Playpen
3:12 error: borrowed value does not live long enough
5:2 note: reference must be valid for the block at 1:10...
3:13 note: ...but borrowed value is only valid for the statement at 3:4

显然,&31i如果分配给则超出范围y after y已宣布。但是,如果它位于同一行y被声明它保留在范围内。我不明白这是为什么。

Rust 的设计是如何让它表现出这种行为的呢?提前致谢。


我认为发生这种情况是因为不同的规则&运算符在绑定或其他地方使用时。

This:

let y: &int = &31i;

等价于:

let temp: int = 31i;
let y: &int = &temp;

除了那个temp是看不见的。这是解释的,例如在,尽管本指南似乎是尚未重写的旧版本(与其他指南一样)。

但是这个:

let y: ∫
y = &31i;

由于某种原因没有这样的语义,所以31i只存在于它的表达式中(即31i)。因此,您无法引用它,因为它会立即被丢弃。

我认为这有点违反直觉,可能值得提出一个问题。也许这只是因为更重要的事情而被忽视的事情之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

地址范围:寿命不够长 的相关文章

随机推荐