gpt4 book ai didi

rust - 为什么 bool 值是可复制的,即使文档没有说明?

转载 作者:行者123 更新时间:2023-11-29 07:45:31 25 4
gpt4 key购买 nike

我正在尝试理解所有权和借用的概念。起初我认为一旦你理解它就很简单。但是……

fn main() {
let a = 5;

let _y = double(a);
println!("{}", a);
}

fn double(x: i32) -> i32 {
x * 2
}

起初我预计这不会编译,因为 a 会被移动到 _y

我有点困惑,但是I found out我是对的,除非 i32 是该规则的一个异常(exception),因为它实现了复制特征。

我看了the Copy trait据我了解,他们在底部列出了实现此特征的所有类型。

所以 bool 类型不存在,所以我假设它的默认行为是“移动”。但是……

fn main() {
let a = true;

let _y = change_truth(a);
println!("{}", a);
}

fn change_truth(x: bool) -> bool {
!x
}

也不会失败。

现在我很困惑。我找到了 Clone trait这似乎与复制特征密切相关。但除非我错过了,否则他们并没有在学习文档中真正提到它。

有人可以给我更多信息吗?

更新:

  1. 我已经提交了 issue on the Rust repository .
  2. 我还制作了一个pull request带有一些更改建议。

最佳答案

你的理解很到位,这似乎是文档的问题。文档没有显示任何基元类型的 Copy 实例,即使它们肯定是 Copy。作为显示编译器将 bool 视为 Copy 的示例,以下编译正常:

fn takes_copyable<T: Copy>(foo: T) {}

fn main() {
takes_copyable(true);
}

关于rust - 为什么 bool 值是可复制的,即使文档没有说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30540419/

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