Zum Inhalt springen

Lebenszeiten

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.


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.


Betrachten Sie die folgende un-annotierte Funktionssignatur.

struct Foo<'a> {
bar: &'a i32
}
// Foo geändert zu &Foo
fn 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.