【发布时间】:2016-09-20 05:25:41
【问题描述】:
我正在使用函数(名为 get)创建对结构成员的引用,然后使用另一个函数(名为 pr)移动该结构,然后取消引用之前创建的指针。
我在这里错了吗(也就是意外工作),还是我的参考根据某些规则仍然有效?
struct MyStruct {
inner: i32,
}
fn get(a: &MyStruct) -> &i32 {
return &a.inner;
}
fn pr(a: MyStruct) {
println!("MyStruct {}", a.inner);
}
fn main() {
println!("Hello, world!");
let x = MyStruct { inner: 3 };
let &i = get(&x);
pr(x);
println!("i {}", i);
}
Rust playground 输出:
Hello, world!
MyStruct 3
i 3
【问题讨论】:
-
我还不是 Rust 专家(我正在研究它..)。但是,变量名称前的 & 号不正确。也就是说,是导致它起作用的原因。如果您将其更改为
let i = get(&x);,则会返回&i32,并且编译器会因为移动而正确出错,正如您所期望的那样。 TLDR:我不确定为什么 variable name 上的 & 号会导致它起作用。我也可能只是忘记了一些基本的东西……所以(耸耸肩)。 -
在 Rust 中,
&foo是一个引用,*const foo是一个原始指针。我已更新您的文本以匹配您的代码。