TL; DR: вы можете получить объект, &'static strу Stringкоторого есть время 'staticжизни.
Хотя другие ответы верны и наиболее полезны, есть (не очень полезный) крайний случай, когда вы действительно можете преобразовать a Stringв a &'static str:
Время жизни ссылки всегда должно быть меньше или равно времени жизни объекта, на который указывает ссылка. Т.е. объект, на который указывает ссылка, должен существовать дольше (или равен), чем ссылка. Поскольку 'staticозначает весь срок службы программы, более длительного срока службы не существует. Но равной продолжительности жизни будет достаточно. Так что, если у a Stringесть время жизни 'static, вы можете получить &'static strот него ссылку.
Создание staticшрифта Stringтеоретически стало возможным в Rust 1.31, когда эта const fnфункция была выпущена. К сожалению, единственная функция const, возвращающая a, Stringв String::new()настоящее время находится за воротами функций (поэтому на данный момент требуется Rust nightly).
Итак, следующий код выполняет желаемое преобразование (с использованием 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?