Rust 中的 impl 与导出

mer*_*ian 3 rust

我是 Rust 新手。我在 Rust 的编译器中找到了这段代码。

#[must_use]
pub struct IeeeFloat<S> {
    /// Absolute significand value (including the integer bit).
    sig: [Limb; 1],

    /// The signed unbiased exponent of the value.
    exp: ExpInt,

    /// What kind of floating point number this is.
    category: Category,

    /// Sign bit of the number.
    sign: bool,

    marker: PhantomData<S>,
}
Run Code Online (Sandbox Code Playgroud)

然后他们做了

impl<S> Copy for IeeeFloat<S> {}
impl<S> Clone for IeeeFloat<S> {
    fn clone(&self) -> Self {
        *self
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这和 #[derive(Copy, Clone)] 不一样吗?为什么他们明确地为 IEEE 编写 impl Copy?这个克隆实现不是和std中的克隆一样吗?为什么要重新定义它

链接在这里

Bla*_*ans 6

不,这与派生不同,因为编译器不会使其足够通用。当你有一个泛型类型T<U>,并尝试派生Clone它时,它只会实现Clone for T<U>for U: Clone即使T<U>可以在没有U: Clone. 请注意,这是 的情况IeeeFloat<S>,因为PhantomData<S>: Clone对于所有S