gpt4 book ai didi

string - [T] 与 [T] 之间的差异

转载 作者:行者123 更新时间:2023-12-03 07:53:57 25 4
gpt4 key购买 nike

我想知道切片 ([T])对切片的引用 (&[T]) 之间的区别。我不明白 slices 如何是未调整大小的类型,编译器不能通过源代码推断出切片的大小吗?

我知道我们需要对切片的引用才能使其有用,但是,只有当我了解切片如何调整大小时,这才有意义。

此外,我想知道str&str之间的区别。我知道一个是切片,另一个是对切片的引用,并且 &str 还存储对字符串开头和长度的引用。但令我困惑的是,为什么我们不能在没有引用的情况下单独使用 str 。为什么我们不能将大小存储在 str 切片本身中。为什么我们需要它的引用。我有 C++ 背景,所以也许使用 C++ 类型和术语可以澄清问题!

最佳答案

引用,&[T]&str 只是一个指针(和一个长度)。这个指针指向哪里?它指向一些数据。该数据是[T](或str)、切片本身、数据的实际字节。在 C++ 中没有对应的内容。

由于数据可以是任意长度,因此我们对[T]无能为力。我们不能将它作为参数,也不能返回它,它总是必须用某种引用来包装。通常是 &&mut,但也可以是 BoxRcArc >,用于拥有的切片。

有时,编译器可以推断切片大小(例如,当我们通过封闭的常量范围进行切片时)。但切片类型从不编码长度。在运行时只有对它的引用才可以。这是因为拥有一些可以具有任何运行时确定长度的数据非常有用,例如 C++ 的 std::spanstd::string_view

关于string - [T] 与 [T] 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76507596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com