gpt4 book ai didi

rust - 获得对不可变变量的可变引用?

转载 作者:行者123 更新时间:2023-12-03 11:32:36 25 4
gpt4 key购买 nike

这是代码,因为a被声明为不可变的,所以我们无法从a获得可变引用,对吗?但是这个已经编译了,为什么呢?

struct Foo;

fn main() {
let a = &mut Foo;
a.mut_ref();
}

impl Foo {
fn mut_ref(&mut self) { }
}
code-link

最佳答案

变量a的类型是&mut Foo,即a本身是对Foo对象的可变引用。更改a意味着使其指向另一个Foo对象。由于a本身是不可变的,因此您无法更改a指向的内容,并且您的代码也不会以任何方式对此进行反驳。
您的代码只是将&mut Foo作为self参数传递给mut_ref() –请注意,self的类型也是&mut Foo。不会进行自动取消引用– a已经具有与self参数对应的类型。但是,这里我们是triggering an implicit reborrow,因此调用等效于Foo::mut_ref(&mut *a)。但是,这种隐式重借并不是使代码正常工作的原因-将可变引用移出a也将是完全允许的。
尽管a作为变量是不可变的,但它仍然是可变的引用,因此您可以对它指向的Foo对象进行突变(假设Foo具有任何要突变的状态)。您无法获得对a的可变引用,该引用需要具有&mut &mut Foo类型。

关于rust - 获得对不可变变量的可变引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63479561/

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