繁体   English   中英

Rust 在从数组中调整大小时如何确定切片的长度?

[英]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 长,从xy的分配失败。

使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM