C++ c++;使用memcpy在阵列内部进行复制

C++ c++;使用memcpy在阵列内部进行复制,c++,memcpy,C++,Memcpy,如果我有一个元素数组,可以使用memcpy将一些数据从数组的后面复制到前面吗 以代码表示: int a[5] = {1,2,3,4,5}; memcpy(a, a + 2, 3 * sizeof(int)); 正如您所看到的,一些零件被复制到前面的另一个位置,然后被覆盖(编号3) memcpy之后的数组是{3,4,5,4,5},但这会调用未定义的行为吗?或者这样做完全有效吗?我使用C++和VS2017编译器。< P>这是不行的: MeMCPY 要求源区和目的区不重叠。C专门为区域重叠的情况提

如果我有一个元素数组,可以使用memcpy将一些数据从数组的后面复制到前面吗

以代码表示:

int a[5] = {1,2,3,4,5};

memcpy(a, a + 2, 3 * sizeof(int));
正如您所看到的,一些零件被复制到前面的另一个位置,然后被覆盖(编号3)


memcpy之后的数组是{3,4,5,4,5},但这会调用未定义的行为吗?或者这样做完全有效吗?我使用C++和VS2017编译器。

< P>这是不行的:<代码> MeMCPY 要求源区和目的区不重叠。C专门为区域重叠的情况提供函数
memmove


既然你在这里加上C++,你也可以考虑使用<代码> STD::复制< /COD>,因为它的约束比MeMyP弱:只需目标迭代器必须在要复制的范围之外,在您的场景中就是这样。

这就是原因。»如果对象重叠,则行为是未定义的。«
man memcpy
:“内存区域不得重叠。”谢谢亨利·门克,您可以将其作为答案发布,这样我就可以接受iTunes
std::copy