数组切片是否遵循与Rust中[T]不同的约定

  • 本文关键字:约定 是否 切片 Rust 数组 rust
  • 更新时间 :
  • 英文 :


我看到切片的类型为[T],但当我们引用数组时,返回的切片的类型是

&[i32;_]

即每个VSCode w/Rust Analyzer。但是它不应该是类型吗

&[i32]

let arr:[i32;_] = [1,2];
let r_arr:&[i32;_] = &arr;

我很困惑,不清楚如何阅读&[i32;_](显然是Slice(与&[i32;N](数组(,这两种类型的定义似乎不明确且非常相似。

&[i32;_]是数组的借位,而&[i32]是切片,意味着动态大小的数组或数组的一部分。

&[i32;_]意味着借用的数组具有静态已知的大小_,这意味着该大小是通过给定初始化器[1, 2]的项计数静态推断的(必须是2,但铁锈分析器没有详细显示(。

&[i32]意味着它是一个切片,在编译时没有已知的大小,并且在运行时动态调整大小。

&[i32;_]是一个瘦指针,这意味着&[i32;_]的实际内存布局只是指向数组起始位置的原始usize指针。

&[i32]是一个胖指针,这意味着&[i32]的实际内存布局由2个usizes组成。一个是指向切片起始位置的原始指针,另一个是切片的长度。

最新更新