我试图了解所有权和借用概念。起初,我认为一旦您理解它就非常简单。但...
fn main() {
let a = 5;
let _y = double(a);
println!("{}", a);
}
fn double(x: i32) -> i32 {
x * 2
}
起初,我希望它不会被编译,因为a
它将被移至_y
。
我有点困惑,但是我发现我本来是对的,但那i32
是该规则的例外,因为它实现了复制特征。
我查看了Copy
特性,据我了解,它们在底部列出了实现此特性的所有类型。
因此该bool
类型不存在,因此我假设其默认行为是“移动”。但...
fn main() {
let a = true;
let _y = change_truth(a);
println!("{}", a);
}
fn change_truth(x: bool) -> bool {
!x
}
也不失败。
现在我很困惑。我发现该Clone
特性似乎与复制特性密切相关。但是除非我错过了,否则他们不会在学习文档中真正提及它。
有人可以给我更多信息吗?
更新:
您的理解很明确,这似乎与文档有关。该文档没有显示Copy
任何原始类型的实例,即使它们确实是Copy
。作为显示编译器认为bool
是的示例Copy
,以下编译就可以了:
fn takes_copyable<T: Copy>(foo: T) {}
fn main() {
takes_copyable(true);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句