rust “as *const _”有什么作用?“_”是什么意思?

siv3szwd  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(144)

上下文:我需要在Rust中扁平化数组的向量,我从Rust社区成员那里找到了以下代码:

fn flatten<T: Clone, const N: usize>(data : Vec<[T; N]>) -> Vec<T> {
    unsafe {
        from_raw_parts(data.as_ptr() as *const _, data.len() * N).to_vec()
    }
}

from_raw_parts从原始指针和长度返回切片。我们传入的原始指针的类型为*const [T;N],我认为我们需要将其转换为*const T。但是,这段代码将其转换为*const _,并产生与使用*const T相同的结果。
_在这里做什么?使用_而不是显式类型是好的做法吗?

umuewwlo

umuewwlo1#

_的意思是“从上下文中推断类型”。在这种情况下,编译器从函数的返回类型推断它是T
关于第二个问题,一般来说,在Rust中,我们倾向于将编译器可以推断的内容留给编译器,但是对于不安全的代码,特别是因为任何错误都可能是非常危险的,我(和其他人)更喜欢显式地指定每个类型。

相关问题