我正在查看一些 rust 源代码,发现了一种名为PhantomData的数据类型。我浏览了 rust 文件,并在互联网上进行了很多搜索。但是,我无法理解此数据类型在rust中的实际用法。如果可能的话,有人可以简单地向我解释一下吗?

pub struct GPIOD {
   _marker: PhantomData<*const ()>,
}

最佳答案

PhantomData 结构旨在向编译器发出信号,即以某种对编译器透明的方式使用了类型或生存期。

引用文档:



例如,如果我们查看切片[T]的迭代器类型: std::slice::Iter<'a, T> its declaration using the button,我们将看到它实际上是这样声明的:

struct Iter<'a, T: 'a> {
    start: *const T,
    end: *const T,
    _phantom: PhantomData<&'a T>,
}
std频繁使用指针算法来使优化更容易获得(尽管不是来认可用户代码中使用指针算法)。在这种情况下,我们需要确保自己确保两个原始指针(不携带生命周期)所指向的数据的生命周期超过了该结构,因此我们保留了一个PhantomData<&'a T>来告诉编译器像Iter拥有&'a T一样工作。强制执行生命周期规则。

09-25 18:38