Avatar ·

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.