Lebenszeiten
Statische Lebenszeit
Abschnitt betitelt „Statische Lebenszeit“Wenn eine Referenz die Lebenszeit 'static hat, bedeutet dies:
'static bedeutet „lebt für das gesamte Programm“, und daher dürfen Daten unter einer statischen Referenz niemals freigegeben werden. Obwohl 'static -Referenzen in der Praxis normalerweise nicht veränderbar sind, hat die Bedeutung der 'static -Lebenszeit keine wesentliche Beziehung zur Veränderbarkeit.
Lebenszeiten-Inferenz
Abschnitt betitelt „Lebenszeiten-Inferenz“Betrachten Sie die folgende un-annotierte Funktionssignatur.
struct Foo<'a> { bar: &'a i32}
fn baz(f: Foo) -> &i32 { /* ... */ }Wird Rust diese Funktionssignatur akzeptieren? Wenn ja, welche Lebenszeiten wird es inferieren?
Die Struktur nimmt einen einzelnen Lebenszeitparameter entgegen, und die Ausgabe hat eine einzelne Lebenszeit, daher nimmt Rust an, dass diese identisch sind.
Komplexe Lebenszeiten-Inferenz
Abschnitt betitelt „Komplexe Lebenszeiten-Inferenz“Betrachten Sie die folgende un-annotierte Funktionssignatur.
struct Foo<'a> { bar: &'a i32}
// Foo geändert zu &Foofn baz(f: &Foo) -> &i32 { /* ... */ }Wird Rust diese Funktionssignatur akzeptieren? Wenn ja, welche Lebenszeiten wird es inferieren?
Rust wird dieses Programm nicht kompilieren, da es unklar ist, ob die Lebenszeit der Ausgabe an die Lebenszeit von &Foo oder die Referenz Foo.bar gebunden ist.