我是 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中的克隆一样吗?为什么要重新定义它
链接在这里
不,这与派生不同,因为编译器不会使其足够通用。当你有一个泛型类型T<U>,并尝试派生Clone它时,它只会实现Clone for T<U>for U: Clone,即使T<U>可以在没有U: Clone. 请注意,这是 的情况IeeeFloat<S>,因为PhantomData<S>: Clone对于所有S。
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |