📜  rust 在编译时无法知道 `str` 类型的值的大小\n没有为 `str` 实现特征 `Sized` - Rust (1)

📅  最后修改于: 2023-12-03 15:19:53.158000             🧑  作者: Mango

Rust 中的 str 类型

在 Rust 中,str 类型代表着 UTF-8 编码的字符串。与其他语言不同的是,str 类型并不是一个确定大小的类型。这是因为,在 Rust 中,在编译时无法知道 str 类型的值的大小。这也导致了在 str 类型上不能够直接进行指针运算等操作。

为了解决这个问题,Rust 提供了一个称为 &str 的引用类型。它可以用来引用一个 str 类型的值,而且可以进行指针运算等操作。

然而,即使使用 &str 类型也不能够直接在编译时知道字符串的大小。这是因为,一个 &str 引用可以引用任意长度的字符串。

为了在编译时能够知道字符串的大小,Rust 提供了一个称为 String 的类型。它是一个动态分配内存的字符串类型,大小在运行时确定。

需要注意的是,str 类型并没有实现特征 Sized,也就是说,它不是一个确定大小的类型。这也是为什么不能够直接对 str 类型进行指针运算等操作的原因之一。

如果需要一个确定大小的字符串类型,可以使用 &[u8] 类型或者 Vec<u8> 类型来代替 str 类型。这两个类型都是确定大小类型,并且可以进行指针运算等操作。不过需要注意的是,它们都不是字符串类型,也就是不能够直接进行字符串操作。在使用它们时需要手动进行编码解码等操作。

总结一下,在 Rust 中,str 类型代表着 UTF-8 编码的字符串,但它不是一个确定大小的类型。为了解决这个问题,可以使用 &str 类型来引用一个 str 类型的值,但是 &str 类型也不是一个确定大小的类型。如果需要一个确定大小的字符串类型,可以使用 &[u8] 类型或者 Vec<u8> 类型。不过需要注意的是,它们都不是字符串类型。