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
?