Tipos de &str

Existe más de un tipo de &str:

  • Cadenas de caracteres literales: que se construyen cuando se escribe código como let mi_cadena = "Soy un &str". Este tipo de &str dura toda la ejecución del programa ya que están escritas directamente en el código fuente y así se traspasa al código binario. El tipo real que tienen estas variables es &'static str. El apostrofo ' indica el tiempo o ciclo de vida (lifetime) de este valor. Las cadenas de caracteres literales tienen un tiempo de vida llamado 'static, que sirve para expresar que la cadena existe durante toda la ejecución del programa.
  • &str prestados: Es la forma habitual del tipo &str. No tiene un tiempo de vida 'static, su tiempo de vida es menor a la duración de todo el programa. Por ejemplo, si se crea un String y se obtiene una referencia a ella, Rust la convertirá a &str si se necesita. Por ejemplo:
fn prints_str(my_str: &str) { // Esta función puede recibir &String y &str
    println!("{}", my_str);
}

fn main() {
    let my_string = String::from("I am a string");
    prints_str(&my_string); // Se pasa a prints_str u &String
}

En Rust, todas las referencias tienen un tiempo de vida asociado. ¿Y qué es el tiempo de vida? Se verá a continuación.