Rust:"as *const _"中的_在做什么?

  • 本文关键字:中的 as const Rust rust
  • 更新时间 :
  • 英文 :


上下文:我需要在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相同的结果。

那么_在这里做什么?使用_而不是显式类型是好的实践吗?

_仅表示"从上下文中推断类型"。在本例中,编译器根据函数的返回类型推断为T

关于第二个问题,一般来说,在Rust中,我们倾向于把它可以推断的东西留给编译器,但是对于不安全的代码,因为任何错误都可能是如此危险,我(和其他人)更喜欢显式地指定每个类型。

最新更新