TL; DR: ви можете отримати &'static stra, 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?