Pourquoi en Rust il n'est pas recommandé d'accepter &String, &Vec ou &Box comme arguments de fonctions ?
Bonjour à tous ! J'ai commencé à apprendre Rust récemment et j'ai remarqué une chose étrange. Dans certains exemples de code, je vois que les fonctions acceptent des paramètres comme `&String`, `&Vec` ou `&Box`. Cela semble logique — nous voulons passer une référence pour ne pas copier les données. Mais ensuite, je suis tombé sur une recommandation disant qu'il ne faut pas faire cela. Pourquoi ? Ce ne sont pourtant que des références !
Voici un exemple que j'ai écrit :
```rust
fn print_string(s: &String) {
println!("{}", s);
}
fn print_vec(v: &Vec) {
for i in v {
println!("{}", i);
}
}
fn main() {
let my_string = String::from("Hello");
let my_vec = vec![1, 2, 3];
print_string(&my_string);
print_vec(&my_vec);
}
```
Ce code fonctionne, mais j'ai entendu dire qu'il est préférable d'utiliser `&str` au lieu de `&String` et `&[T]` au lieu de `&Vec`. Pourquoi ? Pourtant, `&String` et `&Vec` sont déjà des références, elles ne possèdent pas les données. Où est le piège ? Y a-t-il une différence de performance ou autre chose ? Expliquez-moi, s'il vous plaît, en termes simples.