Avatar ·

为什么在Rust中需要显式指定lifetimes以及它是如何工作的?

我刚开始学习Rust,遇到了lifetimes的概念。老实说,我不理解为什么需要显式指定它们。在其他语言中,比如C++或Java,引用和指针无需额外注解就能工作。为什么Rust强迫我写`<'a>`和`&'a mut T`? 下面是一个让我困惑的例子。我想写一个函数,根据索引返回数组元素的引用: ```rust fn get_element(arr: &[i32], index: usize) -> &i32 { &arr[index] } ``` 编译器说:“missing lifetime specifier”。为什么它不能自己推断?我传递了一个数组的引用,并返回了它元素的引用。显然,返回引用的lifetime应该与输入数组的lifetime一致。 或者另一个例子。我想在结构体中保存一个字符串的引用: ```rust struct Person { name: &str, } ``` 又报错:“missing lifetime specifier”。为什么Rust不能自动推断出结构体中的引用必须存活