Static
'static
- наибольшее возможное время жизни и
длится в течение всей жизни работающей программы.
'static
может быть приведено к более короткому
времени жизни. Есть два способа сделать переменную со
временем жизни 'static
и в результате обоих
способов, переменная хранится в неизменяемой памяти бинарного
файла:
- Создание константы с ключевым словом
static
. - Создание строкового литерала, имеющего тип
&'static str
.
Рассмотрим следующий пример, который показывает оба метода:
// Создадим константу со временем жизни `'static`. static NUM: i32 = 18; // Вернём ссылку на `NUM`, у которой собственное время жизни `'static` // приводится ко времени жизни аргумента. fn coerce_static<'a>(_: &'a i32) -> &'a i32 { &NUM } fn main() { { // Создадим *строковый* литерал и выведем его: let static_string = "Я в неизменяемой памяти"; println!("static_string: {}", static_string); // Когда `static_string` выходит из области видимости, ссылка // на неё больше не может быть использована, но данные остаются в бинарном файле. } { // Создадим число для использования в `coerce_static`: let lifetime_num = 9; // Приведём `NUM` ко времени жизни `lifetime_num`: let coerced_static = coerce_static(&lifetime_num); println!("coerced_static: {}", coerced_static); } println!("NUM: {} остаётся доступным!", NUM); }