TL; DR: ви можете отримати &'static str
a, String
який сам має 'static
все життя.
Хоча інші відповіді є правильними та найбільш корисними, є (не дуже корисний) крайній випадок, де ви дійсно можете перетворити a String
на a &'static str
:
Час життя посилання завжди має бути коротшим або рівним часу життя об’єкта, на який посилається. Тобто об'єкт, на який посилається, повинен жити довше (або рівно довше), ніж посилання. Оскільки 'static
означає весь термін служби програми, більш тривалого життя не існує. Але рівного терміну життя буде цілком достатньо. Отже, якщо а String
має тривалість життя 'static
, ви можете отримати &'static str
довідку з нього.
Створення static
типу String
стало теоретично можливим завдяки Rust 1.31, коли ця const fn
функція була випущена. На жаль, на даний момент єдиною функцією const, яка повертає a, String
є String::new()
, і вона все ще перебуває за функціональними воротами (тому наразі потрібно Rust nightly).
Отже, наступний код робить бажане перетворення (за допомогою щоночі) ... і насправді не має практичного використання, за винятком повноти показу, що це можливо в цьому крайньому випадку.
#![feature(const_string_new)]
static MY_STRING: String = String::new();
fn do_something(_: &'static str) {
}
fn main() {
do_something(&MY_STRING);
}
'static
протягом життя означатиме, що рядок ніколи не буде звільнено, тобто витік пам'яті. Навіщо вам&'static str
замість&'a str
якогось відповідного'a
?