为什么在 Rust 中不推荐将 &String、&Vec 或 &Box 作为函数参数?
大家好!我最近开始学习 Rust,注意到一个奇怪的现象。在一些代码示例中,我看到函数接受 `&String`、`&Vec` 或 `&Box` 作为参数。这看起来合乎逻辑——因为我们想传递引用以避免复制数据。但后来我遇到一个建议,说不应该这样做。为什么?它们不就是引用吗?
以下是我写的一个例子:
```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);
}
```
这段代码能运行,但我听说最好用 `&str` 代替 `&String`,用 `&[T]` 代替 `&Vec`。为什么?毕竟 `&String` 和 `&Vec` 已经是引用,它们不拥有数据。有什么陷阱吗?难道在性能或其他方面有区别?请用简单的话解释一下。