gpt4 book ai didi

rust - 为什么创建const指针的集合对 `for val in a.iter()`无效,而对 `a.iter().map(|val| val)`无效?

转载 作者:行者123 更新时间:2023-12-03 11:35:26 26 4
gpt4 key购买 nike

此代码有效:

let mut b: Vec<*const SimpleStruct> = Vec::with_capacity(a.len());
for val in a.iter() {
b.push(val);
}
此代码不起作用:
let b: Vec<*const SimpleStruct> = a.iter().map(|val| val).collect();
Playground
为什么是这样?

最佳答案

当您将&SimpleStruct推送到Vec<*const SimpleStruct>时,Rust知道它可以将引用强制转换为指针。但是,当您对它进行collect编码时,Rust试图将Vec<&SimpleStruct>强制转换为Vec<*const SimpleStruct>,但这是无法做到的,因此您应该更加明确:

let b: Vec<*const SimpleStruct> = a.iter().map(|val| val as *const SimpleStruct).collect();
或者
let b: Vec<*const SimpleStruct> = a.iter().map(|val| -> *const SimpleStruct { val }).collect();

关于rust - 为什么创建const指针的集合对 `for val in a.iter()`无效,而对 `a.iter().map(|val| val)`无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62541457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com