Syntax 使用'理解去参考*';锈迹斑斑
编译代码时会出现以下错误:Syntax 使用'理解去参考*';锈迹斑斑,syntax,reference,rust,move-semantics,borrowing,Syntax,Reference,Rust,Move Semantics,Borrowing,编译代码时会出现以下错误: 错误[E0507]:无法移出借用的内容 -->src/main.rs:11:13 | 11 |设q=*xyz; | ^^^^ | | |无法移出借用的内容 帮助:考虑使用引用代替:‘*XYZ’ 请帮助我理解这里出了什么问题。当您编写时,让a=b在Rust中,b的值移动到a,变量b不再可用 在您的例子中,xyz是对abc的引用,因此*xyz与abc是一样的。移动abc是一个错误,因为引用xyz仍然存在,但现在指向无效内存
错误[E0507]:无法移出借用的内容
-->src/main.rs:11:13
|
11 |设q=*xyz;
| ^^^^
| |
|无法移出借用的内容
帮助:考虑使用引用代替:‘*XYZ’
请帮助我理解这里出了什么问题。当您编写
时,让a=b
在Rust中,b
的值移动到a
,变量b
不再可用
在您的例子中,xyz
是对abc
的引用,因此*xyz
与abc
是一样的。移动abc
是一个错误,因为引用xyz
仍然存在,但现在指向无效内存
如果您不明白为什么像i32
这样的数字类型不会发生这种情况,那是因为大多数简单原语实现了Copy
特性。这是一种标记特征,它告诉编译器复制内存中的值,而不是移动它。对于小型类型,这可能与通过引用传递的性能相同(有时甚至更好)
见:
Copy
类型,所以它们不会被移动。您的结构在分配给变量时将被移动,因为它不是Copy
。
struct Abc {
a: i32,
}
fn main() {
let mut abc = Abc { a: 30 };
let xyz = &abc;
let q = *xyz;
}