std::memmove
来自 cppreference.cn
定义于头文件 <cstring> |
||
void* memmove( void* dest, const void* src, std::size_t count ); |
||
按顺序执行以下操作
- 隐式创建位于 dest 的对象。
- 从 src 指向的对象复制 count 个字符(如同类型为 unsigned char,下同)到一个临时数组 arr 中,该数组包含 count 个字符,其中 arr 不与 dest 和 src 指向的对象重叠。
- 从 arr 复制 count 个字符到 dest 指向的对象。
如果 dest 或 src 是一个 空指针 或 无效指针,则行为未定义。
目录 |
[edit] 参数
dest | - | 指向要复制到的内存位置的指针 |
src | - | 指向要复制来源的内存位置的指针 |
count | - | 要复制的字节数 |
[edit] 返回值
如果存在适当创建的对象,则返回指向它的指针;否则返回 dest。
[edit] 注解
尽管规范说明使用了临时缓冲区,但此函数的实际实现不会产生双重复制或额外内存的开销。对于小的 count,它可能会加载和写出寄存器;对于较大的块,常见的做法(glibc 和 bsd libc)是,如果目标在源之前开始,则从缓冲区的前面向前复制字节,否则从末尾向后复制字节,并且在完全没有重叠时回退到 std::memcpy。
当 严格别名 禁止将同一内存作为两种不同类型的值进行检查时,可以使用 std::memmove
来转换值。
[edit] 示例
运行此代码
输出
1234567890 1234456890
[edit] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 4064 | C++98 | 返回的指针是否指向适当创建的对象尚不清楚 | 已明确 |
[edit] 参见
将一个缓冲区复制到另一个缓冲区 (函数) | |
用字符填充缓冲区 (函数) | |
在两个可能重叠的数组之间复制一定数量的宽字符 (函数) | |
(C++11) |
将元素范围复制到新位置 (函数模板) |
以向后顺序复制元素范围 (函数模板) | |
(C++11) |
检查类型是否为可平凡复制的 (类模板) |
C 文档 关于 memmove
|