Rust中如何正确在函数参数中使用常量泛型?
正确使用Rust常量泛型的方法
你的代码存在两个关键问题:
- 常量泛型声明方式错误:不能将常量泛型放在函数参数列表中,它属于类型参数范畴,需要在函数名后的尖括号内声明。
- 数组初始化语法错误:
[1, LEN]是创建包含两个元素(1和LEN的数值)的数组,若要生成大小为LEN、所有元素都是1的数组,应该使用重复初始化语法[1; LEN]。
正确的常量泛型函数写法
常量泛型的声明格式为<const 常量名: 类型>,需放在函数名后的尖括号中,示例代码如下:
// 声明常量泛型LEN,类型限定为usize fn const_generic_test<const LEN: usize>() { // 使用LEN指定数组大小,创建包含LEN个1的数组 let test_arr = [1; LEN]; println!("{:?}", test_arr); } fn main() { // 调用时显式指定常量值 const_generic_test::<10>(); // 也可通过上下文让编译器自动推断常量值 let _fixed_size_arr: [i32; 5] = [1; 5]; const_generic_test(); // 编译器会推断LEN为5 }
扩展:结合普通参数使用常量泛型
如果需要函数同时接收常量泛型和运行时参数,只需将常量泛型保留在尖括号内,普通参数放在函数参数列表中:
fn const_generic_with_param<const LEN: usize>(fill_value: i32) { let test_arr = [fill_value; LEN]; println!("{:?}", test_arr); } // 调用示例 const_generic_with_param::<8>(42);
内容的提问来源于stack exchange,提问作者Pioneer_11
相关产品推荐
相关产品推荐

