gpt4 book ai didi

rust - 了解绑定(bind)和借用

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

我有以下简单的程序

fn main() {
let a = 10;
let b: i32;
let r: &i32;

b = a; // move?
r = &a; // borrow?

println!("{}", a);
println!("{}", b);
println!("{}", r);
println!("{}", &r);
println!("{}", *r);
}

输出是

10
10
10
10
10
  1. 即使移动了值,第一次打印也不会失败。这是因为原始类型还是我遗漏了什么?
  2. 第二次打印似乎还不错。
  3. 第三个直接打印一个引用 - 我们不应该得到内存地址,因为这是一个引用吗?
  4. 第四个打印是对引用的引用,我认为应该打印一个内存地址?
  5. 第五个打印似乎是合理的,因为(我认为)* 是取消引用引用的 value at 运算符。

看来我还不太明白。

详细解释发生了什么。

相关: Move vs Copy in Rust

最佳答案

1, 2 => 您正在使用 i32,即 Copy , 所以在实践中 b = a.clone()

3, 4, 5 => 你对 Deref trait 感到困惑.我发现关于所有权/借用的推理比 rust 中的引用更容易。 r = &a 表示 r 借用 a 所以我可以稍后访问它的值,其他人将拥有它并负责删除它

关于rust - 了解绑定(bind)和借用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37430440/

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