我正在尝试将数组传递给函数:
fn my_func(xs: [usize]) -> usize {
0
}
fn main() {
let arr = [329, 457, 657];
let res = my_func(inp);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
fn my_func(xs: [usize]) -> usize {
0
}
fn main() {
let arr = [329, 457, 657];
let res = my_func(inp);
}
Run Code Online (Sandbox Code Playgroud)
我该如何修复该错误?
您的问题(以及解决问题的原因&
)是,切片在编译时没有已知的大小。
有几种解决方案:
使用明确的长度
fn foo(arr: [usize; 3]) { }
Run Code Online (Sandbox Code Playgroud)
使用显式长度将告诉编译器数组有多大,并且现在可以决定为数组保留多少空间。
使用参考
fn foo(arr: &[usize]) { }
Run Code Online (Sandbox Code Playgroud)
指向切片的引用(实际上是一个胖指针),其大小在编译时已知(取决于您的体系结构,但通常为 32/64 位)。
使用堆分配
fn foo(arr: Box<[usize]> { }
Run Code Online (Sandbox Code Playgroud)
盒子是堆分配的元素(实际上是指针),因此大小也是已知的。
还有其他容器(Rc
、Arc
、...)接受未调整大小的元素。?Sized
您可以轻松地在源代码中找到它们,因为它们对模板参数有要求(请参见Box
示例)。
归档时间: |
|
查看次数: |
1824 次 |
最近记录: |