在尝试不同的方法将Vec<u8>
发送到预期为&[u8]
的函数时,我犯了一个“错误”,但实际上它起作用了。以下是我编写的一些示例代码:
fn sum(v: &[u8]) -> u8 {
let mut s = 0u8;
for x in v.iter() {
s = s + x;
}
return s;
}
fn main() {
let myarr = [1u8, 2u8, 3u8];
let myvec = vec![1u8, 2u8, 3u8];
println!("{}", sum(&myarr));
println!("{}", sum(&myvec));
}
关于这个问题,我有几个疑问:
- 为什么以及如何起作用?
- 这两种类型之间是否存在自动转换?
- 它会产生任何惩罚还是只是获取向量底层数组的内存位置?
- 这是否意味着对于这种类型的使用(在数字数组上进行只读操作),最好使用数组而不是向量作为API?
sum
函数... 我已经更新了答案,使其更清晰。 - Shepmaster[u8]
还是Vec<u8>
,或者应该将Vec<u8>
作为参数传递? - Hernan[u8]
。你能否返回一个&[u8]
取决于你的情况,但通常更节省内存。其他情况使用Vec<u8>
。 - Shepmaster