gpt4 book ai didi

rust - 枚举值的向量会产生所有权问题

转载 作者:行者123 更新时间:2023-11-29 08:14:54 27 4
gpt4 key购买 nike

我有两个代码片段在几天前运行良好。它们看起来相当简单:

1.

let mut mask = 0 as c_ulong;
for bit in bits.iter() {
mask |= *bit as c_ulong;
}

2.

for bit in vec!(...).iter() {
if res & *bit as c_ulong != 0 {
bits.push(*bit);
}
}

两种情况下的向量迭代向量都包含一个 enum,例如:

#[allow(non_camel_case_types)]
#[deriving(PartialEq,Show)]
pub enum SomeEnum {
BLAH = 0x01,
...
}

但不幸的是,现在该代码会在所有 *bit 表达式上导致以下错误。

cannot move out of dereference of `&`-pointer

我不明白这个错误。为什么现在不允许了?我有一个指向具有枚举变体的不可变向量的指针,这些变体实际上只是 int 值。

还有,我该如何解决呢?我知道第一种情况可以转换为使用 .into_iter() - 没关系,之后我不需要那个向量。但是在第二个片段中,我实际上不能在.into_iter() 之后使用两次bit。尽管我只是第一次比较它!

我是否遗漏了一些微不足道的东西?

最佳答案

你的类型曾经是Copy , 但是 this trait is now opt-in .

添加#[deriving(Clone, Copy)] (或将 CloneCopy 添加到现有 #[deriving] 属性的特征列表中)到您的类型。你需要同时实现 CloneCopy ,因为 Copy is a subtrait of Clone (因为任何实现 Copy 的类型也可以简单地实现 Clone )。

pub trait Copy: Clone { }

关于rust - 枚举值的向量会产生所有权问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468243/

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