You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中`as *const _`的作用、`_`的含义及使用规范?

Rust中*const _的作用与最佳实践探讨

一、*const _的具体作用

这里的_是Rust的类型占位符,它告诉编译器:“我不手动指定转换后的类型,你根据上下文自行推导”。

在这段代码里,from_raw_parts函数要求第一个参数是*const T(因为最终要生成&[T]切片),而data.as_ptr()返回的是*const [T; N](指向数组的指针)。由于数组[T; N]在内存中是连续存储的N个T元素,数组指针可以合法转换为元素类型的指针,编译器会自动把*const [T; N]推导转换为*const T,所以用*const _和直接写*const T效果完全一致。

二、是否属于最佳实践?

这得结合场景具体分析:

  • 优势:代码更简洁,不用重复书写可被推导的类型,尤其是类型名称复杂冗长时,能减少冗余代码。
  • 劣势:在unsafe代码块中,显式写出目标类型能更清晰地表达代码意图。其他开发者(包括未来的自己)阅读时,无需额外推导转换后的类型,能直接明白你要把数组指针转为元素指针,降低理解成本。而且unsafe代码本身风险较高,显式类型能减少因编译器推导意外出错导致的问题。

回到这个扁平化数组的场景,编译器的推导逻辑非常明确,用*const _不会出问题,但从unsafe代码的严谨性和可读性角度来说,显式写出*const T会是更优选择——毕竟清晰的代码意图比少写几个字符更重要。

另外需要注意:这段unsafe代码必须确保data的内存是有效状态,且data.len() * N的长度计算准确,否则会触发未定义行为。

内容的提问来源于stack exchange,提问作者November Snow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:05:15