关于 Rust 编程语言生命周期的问题

问题描述

为什么在这个图中'a 在'b 之前结束?它们不应该在花括号的末尾同时结束吗?

enter image description here

这是“The Rust Programming Language”一书中的清单 10-19(https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

解决方法

在这里,生命周期 0.8210316939890709 Timer: 75.11970710754395 'a 都在花括号的末尾结束。它们都在同一范围内创建和销毁,因为它们都没有移动,所以在这种情况下你是正确的。为了我们的目的,它们同时结束。但是,'b 显示在 'a 之前结束的原因与 Rust 借用检查器处理引用的方式有关,并在 Listing 10-18 of the same Rust Programming Language book 下方解释:

'b

Rust 借用检查器拒绝上述代码段,因为引用 // Listing 10-18 { let r; // ---------+-- 'a // | { // | let x = 5; // -+-- 'b | r = &x; // | | } // -+ | // | println!("r: {}",r); // | } // ---------+ 比值 &x 本身寿命更长,这会导致问题。这本书解释了这一点:

程序被拒绝,因为 'b 比 'a 短:引用的主题没有引用那么长。

这很重要。牢记这一概念,让我们再次阅读您的代码片段:

x

借用检查器必须能够保证引用不会超过它所引用的值。因此,引用的生命周期必须短于值本身的生命周期。在您的代码段中,引用的生命周期 // Listing 10-19 { let x = 5; // ----------+-- 'b // | let r = &x; // --+-- 'a | // | | println!("r: {}",r); // | | // --+ | } // ----------+ 显示为在值的生命周期 'a 之前结束,因为从概念上讲,引用的存在时间不得超过值。