std::memmove
来自 cppreference.com
在头文件 <cstring> 中定义 |
||
void* memmove( void* dest, const void* src, std::size_t count ); |
||
从 src 指向的对象复制 count 个字符到 dest 指向的对象。这两个对象都被重新解释为 unsigned char 的数组。
这些对象可以重叠:复制操作就像将字符复制到一个临时字符数组,然后将字符从数组复制到 dest 一样。
如果 dest 或 src 是一个 无效或空指针,即使 count 为零,行为也是未定义的。
如果这些对象 可能重叠或不是 TriviallyCopyable,memmove
的行为未指定,并且 可能未定义。
内容 |
[编辑] 参数
dest | - | 指向要复制到的内存位置的指针 |
src | - | 指向要复制的内存位置的指针 |
count | - | 要复制的字节数 |
[编辑] 返回值
dest
[编辑] 备注
std::memmove
可用于在目标缓冲区中 隐式创建 对象。
尽管指定为“就像”使用临时缓冲区一样,但该函数的实际实现不会产生双重复制或额外内存的开销。对于较小的 count,它可能会加载和写入寄存器;对于较大的块,一种常见的方法(glibc 和 bsd libc)是如果目标从源开始,则从缓冲区开头向前复制字节,否则从末尾向后复制,当没有重叠时,返回到 std::memcpy。
在 严格别名 禁止将同一内存作为两种不同类型的值检查的情况下,可以使用 std::memmove
来转换值。
[编辑] 示例
运行这段代码
输出
1234567890 1234456890
[编辑] 参见
将一个缓冲区复制到另一个缓冲区 (函数) | |
用一个字符填充缓冲区 (函数) | |
在两个可能重叠的数组之间复制一定数量的宽字符 (函数) | |
(C++11) |
将一个范围内的元素复制到新位置 (函数模板) |
按反向顺序复制一个范围内的元素 (函数模板) | |
(C++11) |
检查一个类型是否可以平凡地复制 (类模板) |
C 文档 for memmove
|