[英]How does Rust determine the length of a slice when unsizing from an array?
我知道切片就像 fatptr: (data_ptr, len)
。 当我将数组切片成切片时:
let arr = [0; 10];
let slice_arr = &arr[..];
数组没有像Vec<T>
这样的长度字段。
我知道slice_arr.len()
可以得到 slice 的长度,因为slice_arr
有一个长度字段。 Rust如何知道数组转换为切片时的长度字段?
数组确实有一个长度“参数”。 它不是一个字段,它是类型的一部分:
let x: [u8; 2] = [1, 2];
let y: [u8; 3] = x; // Error here
x
的类型是[u8; 2]
[u8; 2]
。 元素的数量始终为 2,元素的类型始终为u8
。
因为[u8; 2]
[u8; 2]
和[u8; 3]
[u8; 3]
是不同的类型,一个总是正好 2 u8
s 长,另一个总是正好 3 u8
s 长,从x
到y
的分配失败。
使用 arrays 执行某些操作时,编译器具有针对 arrays 的特殊内置语义。 这些内置语义可以利用长度“参数”( [T; N]
N
的 N )。 您可以使用const
generics 在类型级别操作和访问此值,但现在这是仅夜间功能。
使用.len
方法。
use std::io::stdin;
fn main() {
let arr = [0; 10];
let slice_arr = &arr[..];
println!("first element of the slice: {}", slice_arr[0]);
println!("the slice has {} elements", slice_arr.len());
}
https://doc.rust-lang.org/stable/rust-by-example/primitives/array.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.