gpt4 book ai didi

arrays - 从数组取消大小时,Rust如何确定切片的长度?

转载 作者:行者123 更新时间:2023-12-03 11:35:39 27 4
gpt4 key购买 nike

我知道切片就像是fatptr:(data_ptr, len)。当我将数组切成薄片时:

let arr = [0; 10];
let slice_arr = &arr[..];

数组没有像 Vec<T>这样的长度字段。

我知道 slice_arr.len()可以获取切片的长度,因为 slice_arr具有长度字段。将数组转换为切片时,Rust如何知道长度字段?

最佳答案

数组确实具有各种长度的“参数”。它不是字段,而是类型的一部分:

let x: [u8; 2] = [1, 2];
let y: [u8; 3] = x; // Error here
x的类型是 [u8; 2]。元素的数量始终为2,元素的类型始终为 u8
因为 [u8; 2][u8; 3]是不同的类型,所以一个总是正好是2个 u8长,而另一个总是正好是3个 u8长,所以从 xy的分配失败。
当对数组执行某些操作时,编译器对数组具有特殊的内置语义。这些内置语义可以利用长度“参数”( N中的 [T; N])。您可以使用 const泛型在类型级别上操纵和访问该值,但这只是每晚的功能。

关于arrays - 从数组取消大小时,Rust如何确定切片的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535226/

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