rust pointer::swap()和std::ptr::swap()有什么区别?

soat7uwm  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(91)

指针的方法swap()std::ptr::swap()有什么区别?
它们的特征是相似的,就我所测试的而言,它们的行为是相同的。

pub unsafe fn swap(self, with: *mut T)
pub unsafe fn swap<T>(x: *mut T, y: *mut T)

至于std::mem::swap()(用于引用而不是指针),有一种情况是我们不能调用std::mem::swap(),因为它需要两个可变引用。在这种情况下,我们将调用例如slice::swap()std::ptr::swap()怎么样?

mpgws1up

mpgws1up1#

ptr.swap()std::ptr::swap()之间没有区别-前者的实现只是调用后者:

pub const unsafe fn swap(self, with: *mut T)
where
    T: Sized,
{
    // SAFETY: the caller must uphold the safety contract for `swap`.
    unsafe { swap(self, with) }
}

根据the docsmem::swapptr::swap之间的唯一区别是:

  • ptr::swap对指针而不是引用进行操作。
  • ptr::swap允许指向的值重叠。
  • ptr::swap不需要初始化指向的数据/满足指向类型的要求。

除此之外,它们的语义是相同的。

相关问题