string - Rust 中的 `str` 有什么用处吗?

标签 string rust ownership

是否有任何情况下会使用 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/

    相关文章:

    rust - 通过界面而不是真正粗暴和排版重量级的惯用方式是什么?

    使用rust "error: moving out of immutable field"

    c++ - 对象在列表中添加和删除自身

    multithreading - 一个可变借用和多个不可变借用

    C++ 析构函数和所有权

    c++ - 为什么 fstream.open(filename) 使用文字而不是生成的字符串?

    java - Java中的重复字符串达到一定长度

    rust - 派生特征会导致意外的编译器错误,但手动实现有效

    java - 初学编程练习(Java): recursively counting instances of substring in string (. equals()?)

    c - 在stm32上将两个字符串合并成一个 float ?