rust 数组索引使用的正确类型是什么?

thtygnil  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(180)

这段代码可以工作,但是我想显式声明索引范围max的类型。但是uXiX,其中X = 8,16或32会产生编译错误。正确的类型是什么?

fn main() {
    let mut arr2: [[f64; 3]; 3] = [[0.0; 3]; 3];
    let pi: f64 = 3.1415926535;

    let max = 3; // let max: i16 e.g. is wrong

    for ii in 0..max {
        for jj in 0..3 {
            let i = ii as f64;
            let j = jj as f64;
            arr2[ii][jj] = ((i + j) * pi * 41.0).sqrt().sin();
            println!("arr2[{}][{}] is {}", ii, jj, arr2[ii][jj]);
        }
    }
}
cpjpxq1n

cpjpxq1n1#

编译器会给你一个提示:

= note: slice indices are of type `usize`

必须使用usize对切片进行索引。usize是无符号整型,大小与指针相同,可以表示内存偏移量或内存中对象的大小。在32位系统上,它是32位整数,而在64位系统上,它是一个64位整数,将索引变量声明为usize,除非您确实有很多索引变量,在这种情况下,您可以使用x as usize将它们转换为usize
当您省略类型注解时,Rust推断您的整数常量必须是usize类型,因为slices实现Index<usize>,而不是Index<i32>Index<any other integral type>

相关问题