`:: memcpy`的执行顺序

时间:2014-03-12 09:35:37

标签: c++ memcpy

我正在编写一个类成员函数来从(m×n)矩阵中删除一行。矩阵的存储器模型(来自标准线性代数库)保证是连续的块,使得第(i,j)个元素映射到该存储器块的第(i * n + j)个元素。

出于清晰度和性能原因,我想使用::memcpy。 (使用for循环的替代方法很麻烦。)但我需要一些保证。

一般情况下,目标位置重叠源位置,因为如果我删除行 r ,我会使用(删除任何强制转换)清晰度),

::memcpy(r * n, (r + 1) * n, bigger than n in general)

如果保证::memcpy从块的开头复制,那么这将没问题。但是,标准是否保证了这一点?我不明白为什么会这样,并怀疑这些代码的行为是 undefined

2 个答案:

答案 0 :(得分:2)

您应该使用memmove代替memcpymemmove的重叠行为已定义。

用户thang在评论中指出,有一个related article会讨论memcpymemmove之间的区别。

答案 1 :(得分:1)

您是否考虑过使用std::copystd::copy_backwards