Rust 不安全指定的生命周期有哪些例子?

Rust 不安全指定的生命周期有哪些例子?,rust,lifetime,Rust,Lifetime,在过去的三天里,我一直在学习人生主题,现在它们对我开始有意义了。然而,我做了很多实验,但没有以一种会导致运行时不安全行为的方式指定生命周期,因为编译器似乎足够聪明,可以通过不编译来防止这种情况。 因此,我有以下一连串的问题: Rust编译器会捕获每一种不安全的生命周期说明符使用情况,这是真的吗 如果是的话,那么为什么Rust需要手动指定生命周期,而它可以通过推断不安全的场景来自行指定生命周期?或者它只是一个遗迹,一旦编译器变得足够强大,可以在任何地方进行终身省略,它就会消失吗? 如果否,示例是什

在过去的三天里,我一直在学习人生主题,现在它们对我开始有意义了。然而,我做了很多实验,但没有以一种会导致运行时不安全行为的方式指定生命周期,因为编译器似乎足够聪明,可以通过不编译来防止这种情况。 因此,我有以下一连串的问题:

Rust编译器会捕获每一种不安全的生命周期说明符使用情况,这是真的吗

如果是的话,那么为什么Rust需要手动指定生命周期,而它可以通过推断不安全的场景来自行指定生命周期?或者它只是一个遗迹,一旦编译器变得足够强大,可以在任何地方进行终身省略,它就会消失吗? 如果否,示例是什么?不安全的生命周期说明符使用示例是什么?它们将清楚地证明手动指定寿命的必要性。
除非在函数中或其他地方使用不安全的代码,否则不可能阻止任何编译器错误导致生命周期说明符的未定义行为。但是,生命周期说明符仍然是必要的,因为有时正确的生命周期应该是什么存在歧义。例如:

fn foobar:&i32,baz:&i32->&i32{ // ... } 返回类型的生存期应该是什么?编译器无法推断这一点,因为它可能与bar或baz绑定,并且每种情况都会影响返回值的持续时间,从而影响函数的使用方式。函数体不能用于推断生存期,因为只有使用函数的签名才能完成类型和生存期检查。消除这种歧义的唯一方法是明确说明返回值应具有的生存期:

fn foo和'a i32{ // ... }
您可以阅读有关生存期省略规则的更多信息。

除非在函数中或其他地方使用不安全代码,否则不可能阻止任何编译器错误使用生存期说明符导致未定义的行为。但是,生命周期说明符仍然是必要的,因为有时正确的生命周期应该是什么存在歧义。例如:

fn foobar:&i32,baz:&i32->&i32{ // ... } 返回类型的生存期应该是什么?编译器无法推断这一点,因为它可能与bar或baz绑定,并且每种情况都会影响返回值的持续时间,从而影响函数的使用方式。函数体不能用于推断生存期,因为只有使用函数的签名才能完成类型和生存期检查。消除这种歧义的唯一方法是明确说明返回值应具有的生存期:

fn foo和'a i32{ // ... } 您可以阅读有关终身省略规则的更多信息