何时(如何)在rust中使用const generic?

何时(如何)在rust中使用const generic?,rust,Rust,我正在学习如何在rust中使用const泛型。下面是一个简单的演示: 有人能告诉我如何使用const泛型数组作为返回类型吗 fn-foo(n:u32)->[i32;C]{ //失败 // [1; 3] //失败 [1;n] } fn hoo(arr:[i32;N]){ println!(“数组是{:?}”,arr); } fn main(){ //给出一个数字,创建一个数组,此操作失败 设f=foo(3); //常量数组作为输入 hoo([1]); hoo([1,2,3]); } 编译消息如下

我正在学习如何在rust中使用const泛型。下面是一个简单的演示:

有人能告诉我如何使用const泛型数组作为返回类型吗

fn-foo(n:u32)->[i32;C]{
//失败
// [1; 3]
//失败
[1;n]
}
fn hoo(arr:[i32;N]){
println!(“数组是{:?}”,arr);
}
fn main(){
//给出一个数字,创建一个数组,此操作失败
设f=foo(3);
//常量数组作为输入
hoo([1]);
hoo([1,2,3]);
}
编译消息如下所示:

编译操场v0.0.1(/playerd)
错误[E0435]:尝试在常量中使用非常量值
-->src/main.rs:2:9
|
1 | fn foo(n:u32)->[i32;C]{
|-这需要是一个常数`
2 |[1;n]
|         ^
错误:由于上一个错误而中止
有关此错误的详细信息,请尝试“rustc--explain E0435”。
错误:无法编译`
要了解更多信息,请使用--verbose再次运行该命令。

常量泛型的要点是数组的大小在编译时是已知的。如果您想要运行时已知的大小,那么这就是
Vec
的用途。请考虑

fn foo<const C: usize>() -> [i32; C] {
    [1; C]
}
fn foo()->[i32;C]{
[1;C]
}
那就称它为

foo::<3>();
foo::();
请注意,从本质上讲,这迫使您只使用常量值;如果您试图将局部变量放入泛型参数位置,您将得到一个错误。

常量泛型的要点是数组的大小在编译时是已知的。如果您想要运行时已知的大小,那么这就是
Vec
的用途。请考虑

fn foo<const C: usize>() -> [i32; C] {
    [1; C]
}
fn foo()->[i32;C]{
[1;C]
}
那就称它为

foo::<3>();
foo::(); 请注意,从本质上讲,这迫使您只使用常量值;如果您试图将局部变量放入泛型参数位置,您将得到一个错误