我想了解所有权和借贷的概念.起初我觉得一旦你理解它就很简单了.但...
fn main() {
let a = 5;
let _y = double(a);
println!("{}", a);
}
fn double(x: i32) -> i32 {
x * 2
}
Run Code Online (Sandbox Code Playgroud)
起初我原本以为这不会编译,因为a本来会被移动到_y.
我有点困惑,但我发现我会是正确的,除了这i32是规则的一个例外,因为它实现了复制特征.
我查看了这个Copy特性,据我了解,它们列出了在底部实现此特征的所有类型.
所以bool类型不存在,所以我认为它的默认行为是"移动".但...
fn main() {
let a = true;
let _y = change_truth(a);
println!("{}", a);
}
fn change_truth(x: bool) -> bool {
!x
}
Run Code Online (Sandbox Code Playgroud)
也不会失败.
现在我很困惑.我发现这个Clone特征似乎与复制特征密切相关.但除非我错过了,否则他们在学习文档中并没有真正提及它.
有人可以给我更多信息吗?
更新:
你的理解很明显,这似乎与文档有关.文档没有显示Copy任何基元类型的实例,即使它们是肯定的Copy.作为显示编译器认为bool是的示例Copy,以下编译就好了:
fn takes_copyable<T: Copy>(foo: T) {}
fn main() {
takes_copyable(true);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |