slice ([T])我想知道 a和 a之间的区别reference to a slice (&[T])。我不明白未slices调整大小的类型如何,编译器不能通过源代码推断出切片的大小吗?
我知道我们需要引用切片才能使其有用,但是,只有当我了解如何slices调整大小时,这才有意义。
str此外,我想知道和之间的区别&str。我知道一个是切片,另一个是对切片的引用,并且&str还存储对字符串开头和长度的引用。但令我困惑的是,为什么我们不能str在没有参考的情况下单独使用。为什么我们不能将大小存储在str切片本身中。为什么我们需要它的引用。我来自 C++ 背景,所以也许使用 C++ 类型和术语可以澄清问题!
引用&[T]or&str只是一个指针(和一个长度)。这个指针指向哪里?它指向一些数据。该数据是[T](或str)、切片本身、数据的实际字节。C++ 中没有对应的内容。
由于数据可以是任意长度,因此我们无能为力[T]。我们不能将它作为参数,也不能返回它,它总是必须用某种引用来包装。通常它是&or &mut,但对于拥有的切片也可以是BoxorRc或Arc。
有时,编译器可以推断切片大小(例如,当我们通过封闭的常量范围进行切片时)。但切片类型从不编码长度。在运行时只有对它的引用才可以。这是因为拥有一些可以具有任何运行时确定长度的数据非常有用,例如 C++std::span或std::string_view.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |