TL; DR: puede obtener un &'static str
de un String
que en sí tiene 'static
toda la vida.
Aunque las otras respuestas son correctas y más útiles, hay un caso de borde (no tan útil), donde de hecho puede convertir String
a en a &'static str
:
La vida útil de una referencia siempre debe ser más corta o igual a la vida útil del objeto referenciado. Es decir, el objeto referenciado tiene que vivir más (o el mismo tiempo) que la referencia. Dado que 'static
significa toda la vida útil de un programa, no existe una vida útil más larga. Pero una vida igual será suficiente. Entonces, si String
tiene una vida útil de 'static
, puede obtener una &'static str
referencia de él.
Teóricamente, la creación de un static
tipo se String
ha hecho posible con Rust 1.31 cuando const fn
se lanzó la función. Desafortunadamente, la única función const que devuelve a String
es String::new()
actualmente, y todavía está detrás de una puerta de función (por lo que se requiere Rust nightly por ahora).
Entonces, el siguiente código hace la conversión deseada (usando todas las noches) ... y en realidad no tiene ningún uso práctico, excepto para mostrar que es posible en este caso de borde.
#![feature(const_string_new)]
static MY_STRING: String = String::new();
fn do_something(_: &'static str) {
}
fn main() {
do_something(&MY_STRING);
}
'static
El tiempo de vida implicaría que la cadena nunca se desasignará, es decir, una pérdida de memoria. ¿Por qué necesitas en&'static str
lugar de&'a str
algo apropiado'a
?