这是如何使用
str
类型:let hello = "Hello, world!";
// with an explicit type annotation
let hello: &'static str = "Hello, world!";
let hello: str = "Hello, world!";
导致expected `str`, found `&str`
为什么文本的默认类型不像所有基本类型、向量和String
一样是str
而是引用呢?
&str
表示它是一个引用(也称为指针)。典型的编译器会将所有字符串常量(多个字节)放在二进制文件中,传递的只是指向这些数据的指针。这在 C 中也是一样的,你通常不会有一个char[32]
,而是一个char*
作为你的变量类型。 - Matthias Wimmerstr
是唯一一个没有实现Copy
的原始类型。所以对于整数类型、布尔类型等,让它们成为引用或具有生命周期根本没有意义,因为它们可以通过从可执行文件中复制来拥有上下文的所有权而不会出现运行时问题。然而,对于str
来说情况并非如此,因为克隆它的成本很高,你几乎总是需要一个对它的引用或将其变成完整的字符串以便正确地修改它。 - msrd0Copy
,包括 切片 和 可变引用,以及 数组 和 元组,如果它们的元素没有实现它。 - Frxstrem