Function core::ptr::swap_nonoverlapping

1.27.0 (const: unstable) · source ·
pub unsafe fn swap_nonoverlapping<T>(x: *mut T, y: *mut T, count: usize)
Expand description

xy 开始在两个内存区域之间交换 count * size_of::<T>() 字节。 这两个区域必须 不能 重叠。

该操作是 “untyped”,因为数据可能未初始化或违反 T 的要求。 初始化状态被完全保留。

Safety

如果违反以下任一条件,则行为是未定义的:

  • xy 都必须 有效 才能读取和写入 count * size_of::<T>() 个字节。

  • xy 必须正确对齐。

  • x 开始的内存区域,大小为 count * size_of::<T>() 字节不得与以 y 开始且大小相同的内存区域重叠。

请注意,即使有效复制的大小 (count * size_of::<T>()) 是 0,指针也必须非空的并且正确对齐。

Examples

基本用法:

use std::ptr;

let mut x = [1, 2, 3, 4];
let mut y = [7, 8, 9];

unsafe {
    ptr::swap_nonoverlapping(x.as_mut_ptr(), y.as_mut_ptr(), 2);
}

assert_eq!(x, [7, 8, 3, 4]);
assert_eq!(y, [1, 2, 9]);
Run