是否有任何情况下会使用 str
不借?这甚至有意义吗?
我了解 String
之间的区别和 &str
,但因为有 &str
也必须有str
?
最佳答案
你不能用 str
类型的值做很多事情,但在很多情况下您会希望引用类型 str
.
Box<str>
或 Rc<str>
- 拥有的类型,类似于 String
,但不能通过变异来增长或重新分配T: Deref<Target = str>
这样的约束。 , T: AsRef<str>
或 T: Borrow<str>
.例如 HashMap::get
具有以下签名:pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V> where
K: Borrow<Q>, // K is the key type for the HashMap
Q: Hash + Eq,
这意味着您可以拥有一个 HashMap<String, i32>
,但使用 &str
访问值键,例如map.get("key")
.这里Q
将被推断为 str
,但 k
参数仍然是 &str
( &Q
)。?Sized
注释意味着 Q
不需要在编译时知道大小,明确允许无大小的类型,如 str
要使用的。关于string - Rust 中的 `str` 有什么用处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66801681/