【发布时间】:2010-12-29 23:31:02
【问题描述】:
当源和目标重叠时使用 memcpy() 会导致未定义的行为 - 在这些情况下,只能使用 memmove()。
但是如果我确定缓冲区不重叠怎么办 - 是否有理由专门使用 memcpy() 或专门使用 memmove()?我应该使用哪个?为什么?
【问题讨论】:
-
如果我的生活依赖它,我不会使用
std::copy。 -
@Matt Joiner:你能解释一下你为什么这么不喜欢
std::copy()吗? -
这是糖衣,并没有带来特别的性能提升。此外,它更难用肉眼解析,并且占用更多空间(std::copy 可以占用 160 个字符)。唯一的好处是它为你包装了一个循环,这很容易出错。但有可能知道 std::copy 的人能够正确地循环。
-
小心关于性能的断言,@MattJoiner。 stackoverflow.com/questions/4707012/c-memcpy-vs-stdcopy/…
-
@MattJoiner:虽然这是一个老问题,但我想提一下,STL 中最接近
std::memmove/std::memcpy的不是std::copy,而是std::copy_n,它可以接受相同的输入参数,甚至可能输入更少,因为您不需要sizeof并且 - 此外 - 适用于任何类型。顺便说一句:我真的不明白,你是如何得到 160 个字符的。