std:: memmove
|
定义于头文件
<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 是 空指针 或 无效指针 ,则行为未定义。
目录 |
参数
| dest | - | 指向目标内存位置的指针 |
| src | - | 指向源内存位置的指针 |
| count | - | 要复制的字节数 |
返回值
如果存在一个 已创建的合适对象 ,则返回指向它的指针;否则返回 dest 。
注释
尽管规范说明会使用临时缓冲区,但该函数的实际实现不会产生双重拷贝或额外内存的开销。对于较小的 count ,可能直接加载和写入寄存器;对于较大的数据块,常见实现方案(glibc和bsd libc)是:若目标起始位置在源之前,则从缓冲区起始处向前拷贝字节;反之则从末尾向后拷贝;当完全不存在重叠时,会回退到 std::memcpy 。
当
严格别名规则
禁止以两种不同类型值的形式检查同一内存区域时,可使用
std::memmove
进行值类型转换。
示例
输出:
1234567890 1234456890
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 4064 | C++98 | 未明确返回的指针是否指向适当创建的对象 | 已明确说明 |
参见
|
复制一个缓冲区到另一个缓冲区
(函数) |
|
|
用字符填充缓冲区
(函数) |
|
|
在两个可能重叠的数组间复制指定数量的宽字符
(函数) |
|
|
(C++11)
|
复制元素范围到新位置
(函数模板) |
|
按逆序复制元素范围
(函数模板) |
|
|
(C++11)
|
检查类型是否可平凡复制
(类模板) |
|
C 文档
for
memmove
|
|