Rust函数参数用泛型固定大小数组为何报E0423错误?
问题原因
你代码中声明的N是普通类型参数,而Rust固定大小数组[T; Len]语法中的Len必须是编译期可确定的常量值,因此需要将N声明为const泛型参数而非普通类型参数。
解决方案
将泛型参数N声明为const usize类型的const泛型即可,修改后的代码如下:
// 注意const关键字修饰N,指定其类型为usize fn a<T, const N: usize>(arr: &[T; N]) { // 此处可直接使用固定长度的arr,长度校验在编译期完成,无运行时边界检查开销 } // 调用示例 fn main() { let arr_3 = [1, 2, 3]; a(&arr_3); // 编译通过,N被自动推导为3 let arr_2 = ["a", "b"]; a(&arr_2); // 编译通过,N被自动推导为2 }
补充说明
- const泛型在Rust 1.59及以上稳定版本可用,若使用更低版本需要升级工具链,或开启对应不稳定特性。
- 如果你需要对数组长度做额外的编译期约束,比如要求长度必须大于0,可以配合const断言实现:
#![feature(generic_const_exprs)] // 该特性目前需要nightly工具链 fn a<T, const N: usize>(arr: &[T; N]) where [(); N - 1]:, // 编译期校验N >= 1,N=0时直接触发编译报错 { // 函数逻辑 }
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

