Avatar ·

Warum wird in Rust nicht empfohlen, &String, &Vec und &Box als Funktionsargumente zu verwenden?

Hallo zusammen! Ich habe vor kurzem angefangen, Rust zu lernen, und mir ist eine seltsame Sache aufgefallen: In vielen Tutorials und auf Stack Overflow wird geschrieben, dass man keine Funktionen schreiben sollte, die `&String`, `&Vec` oder `&Box` als Parameter akzeptieren. Stattdessen wird empfohlen, `&str`, `&[T]` und einfach `&T` (oder `&T` für Box) zu verwenden. Aber mir ist nicht ganz klar, worin das Problem besteht.\n\nHier ist ein einfaches Beispiel, das ich für die Arbeit mit Text geschrieben habe:\n\n```rust\nfn print_length(s: &String) {\n println!("Länge des Strings: {}", s.len());\n}\n\nfn main() {\n let my_string = String::from("Hallo, Welt!");\n print_length(&my_string);\n}\n```\n\nDieser Code funktioniert. Warum wird er als schlechter Stil angesehen? Was ist an `&String` schlechter als an `&str`? Und dasselbe mit Vektoren: Was ist an `&Vec` schlechter als an `&[i32]`? In beiden Fällen übergebe ich ja eine Referenz, nicht das Eigentum.\n\nMich verwirrt, dass