Wie funktioniert das Lifetime bei konstanten Strings / String-Literalen?

Ich lese die Tutorial auf der offiziellen Website und ich habe einige Fragen zur Lebensdauer von konstanten Strings / String-Literalen.

Ich erhalte eine Fehlermeldung, wenn ich den folgenden Code schreibe:

fn get_str() -> &str {
    "Hello World"
}

Error

error[E0106]: missing lifetime specifier
 --> src/main.rs:1:17
  |
1 | fn get_str() -> &str {
  |                 ^ expected lifetime parameter
  |
  = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
  = help: consider giving it a 'static lifetime

Es ist jedoch in Ordnung, wenn ich einen Parameter hinzufüge:

fn get_str(s: &str) -> &str {
    "Hello World"
}

Warum funktioniert das? Wie funktioniert"Hello World" Aus dem Parameter ausleihens, obwohl es nichts mit @ zu tun hs?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage