相关疑难解决方法(0)

什么是Rust的确切自动解除引用规则?

我正在学习/试验Rust,在我用这种语言找到的所有优雅中,有一个让我感到困惑并且看起来完全不合适的特点.

在进行方法调用时,Rust会自动取消引用指针.我做了一些测试来确定确切的行为:

struct X { val: i32 }
impl std::ops::Deref for X {
    type Target = i32;
    fn deref(&self) -> &i32 { &self.val }
}

trait M { fn m(self); }
impl M for i32   { fn m(self) { println!("i32::m()");  } }
impl M for X     { fn m(self) { println!("X::m()");    } }
impl M for &X    { fn m(self) { println!("&X::m()");   } }
impl M for &&X   { fn m(self) { println!("&&X::m()");  } }
impl M for &&&X  { …
Run Code Online (Sandbox Code Playgroud)

reference dereference formal-semantics rust

152
推荐指数
2
解决办法
2万
查看次数

Rust会自动取消引用原始类型引用吗?

我是Rust的新手,并试图了解引用的工作原理.在下面的代码中,当我想要进行计算时a1,i32我不必取消引用它.但随着b1这是一个Box,我必须取消对它的引用.

实际上,这两个let a2 = a1 * 2;let a3 = *a1 * 2;的行为类似.看起来像原语中的解引用是可选的,或者编译器隐式地为我们做这件事.

fn main(){
    let a = 5;
    let b = Box::new(10);
    let a1 = &a;
    let b1 = &b;

    println!("{} {}", a1, b1);

    let a2 = a1 * 2;
    let b2 = (**b1) * 10;
    let a3 = *a1 * 2;

    println!("{} {} {}", a2, a3, b2);

}
Run Code Online (Sandbox Code Playgroud)

有人可以解释这个功能吗?

rust

10
推荐指数
1
解决办法
555
查看次数

标签 统计

rust ×2

dereference ×1

formal-semantics ×1

reference ×1