Статическое время жизни

Последнее обновление: 25.04.2021

Rust имеет одну специальную встроенную аннотацию, которая называется 'static и которая означает, что ссылка будет существовать в течение всей программы.

Например, ранее была рассмотрена следующая программа:

fn main(){
	let message = get_message();
	println!("message: {}", message);
}

fn get_message<'a>() -> &'a str {
	"hello"
}

Фактически здесь мы имеем дело со статическим временем жизни ссылки, которое равно времени выполнения программы. Почему? Строковые литералы сохраняются в бинарном виде и доступны в течение всего времени выполнения программы. Поэтому время жизни описывается как статическое. То есть ссылка живет в течение всей работы программы. И мы могли бы здесь применить аннотацию 'static:

fn main(){
	let message = get_message();
	println!("message: {}", message);
}

fn get_message() -> &'static str {
	"hello"
}

Причем не важно, в какой области видимости создается ссылка, она будет доступна в течение все работы программы. Например:

fn main(){
	let message;
	{	
		let words = get_message();
		message = words;
	} 
	// ссылка, возвращенная get_message, продолжает существовать
	println!("message: {}", message);
}

fn get_message() -> &'static str {
	"hello"
}

Здесь ссылка возвращается во вложенном блоке кода, который по идее создается свою область видимости, однако по-прежнему проблем с компиляцией и выполнением программы не возникнет. Поскольку возвращается строковый слайс в виде строкового литерала со статическим временем жизни.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850