为什么在 Rust 中访问结构体指针上的字段可以工作?

Mar*_*ett 5 pointers coercion rust

我注意到,给定 a P<SomeStruct>,直接在指针上访问 a 的字段SomeStruct似乎可以工作,但我不确定为什么会这样。例如,此代码按预期编译并工作(打印“1234”):

#![feature(rustc_private)]

extern crate syntax;
use syntax::ptr::P;

struct Baz {
    id: String,
}

fn foo() {
    let mut struct_pointer: P<Baz> = P(Baz {
        id: "1234".to_string(),
    });
    println!("{}", struct_pointer.id);
}
Run Code Online (Sandbox Code Playgroud)

什么语言功能允许我访问绑定id上的字段struct_pointer?取消引用?强迫?有什么方法可以通过查看文档来判断这种事情是否有效P

Kor*_*nel 4

它是使用Trait实现Deref

在 Rust 中,.需要时会自动取消引用,因此编译器可以将其解释foo.bar(*foo).bar.