用单撇号表示的Rust类型是什么?


89

我在Rust中遇到了许多用单撇号表示的类型:

'static
'r
'a

那撇号的意义是什么?也许是引用(&)的修饰符?特定于引用的泛型类型?我不知道隐藏在哪里的文档。



先前评论中的链接不再起作用。我不知道这是否等效:doc.rust-lang.org/book/lifetimes.html
Ellen Spertus

Ellen的链接也已停止工作-这是新链接(截至2019年6月):doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Answers:


71

这些是Rust命名的生命周期。

引用Rust编程语言

Rust中的每个引用都有一个生存期,这是该引用有效的范围。就像大多数时间类型被推断一样,大多数时间生命周期都是隐式和推断的。与由于多种类型而可能要注释类型的情况类似,在某些情况下,引用的生存期可能以几种不同的方式关联,因此Rust需要我们使用通用生存期参数来注释关系,以便确保运行时使用的实际引用绝对有效。

终身注释不会更改所涉及的任何参考的有效期限。与在签名指定通用类型参数时函数可以接受任何类型的方式相同,在签名指定通用寿命参数时函数可以接受具有任何生存期的引用。生命周期注释所做的是将多个引用的生命周期相互关联。

生命周期注释的语法略有不同:生命周期参数的名称必须以撇号开头'。生命周期参数的名称通常都是小写字母,并且与泛型类型一样,它们的名称通常很短。'a是大多数人默认使用的名称。生命周期参数注释&位于引用的之后,并且空格将生命周期注释与引用的类型分隔开。

换句话说,生命周期近似于执行范围,在该范围内参考所指向的数据是有效的。Rust编译器将保守地推断出最短的生命周期以确保安全。如果要告诉编译器参考寿命比最短估计寿命长,可以命名它,例如,输出参考与给定输入参考具有相同的生存期。

'static生命周期是一个特殊的生命周期,最长的住所有寿命的-该计划的持续时间。一个典型的例子是字符串“ literals”,它在程序/模块的生命周期中始终可用。

您可以从第29张幻灯片开始的幻灯片中获取更多信息。

Rust中的生存期还深入讨论了生存期。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.