gpt4 book ai didi

syntax - 了解在 Rust 中使用 '*' 取消引用

转载 作者:行者123 更新时间:2023-11-29 08:29:28 24 4
gpt4 key购买 nike

struct Abc {
a: i32,
}

fn main() {
let mut abc = Abc { a: 30 };
let xyz = &abc;
let q = *xyz;
}

编译代码出现如下错误:

error[E0507]: cannot move out of borrowed content
--> src/main.rs:11:13
|
11 | let q = *xyz;
| ^^^^
| |
| cannot move out of borrowed content
| help: consider using a reference instead: `&*xyz`

请帮助我了解这里出了什么问题。

最佳答案

当你在 Rust 中编写 let a = b; 时,b 的值被 move a ,并且变量 b 不再可用。

在你的例子中,xyz 是对 abc 的引用,所以 *xyzabc 是一样的>。 move abc 是一个错误,因为引用 xyz 仍然存在,但现在指向无效内存。

如果您对为什么像 i32 这样的数字类型没有发生这种情况感到困惑,那是因为大多数简单的原语都实现了 Copy 特性。这是标记特征,它告诉编译器复制内存中的值,而不是 move 它。对于小型类型,这与通过引用传递的性能相同(有时甚至更好)。

参见:

关于syntax - 了解在 Rust 中使用 '*' 取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494215/

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