为什么布尔值是可复制的,即使文档没有说明?

Why are booleans copyable even though the documentation doesn't indicate that?

我想了解所有权和借用的概念。起初我认为一旦你理解它就很简单。但是...

fn main() {
    let a = 5;

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

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

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

我有点困惑,但是 I found out 除了 i32 是规则的例外,因为它实现了复制特征,我本来是对的。

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

所以 bool 类型不存在,所以我假设它的默认行为是 "moved"。但是...

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。作为显示编译器认为 boolCopy 的示例,以下编译就好了:

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

fn main() {
    takes_copyable(true);
}