C++ 将 memcpy 转换为 std::copy

tmi*_*hty 5 c++ copy

我想用“std::copy”替换“memcpy”,但我只是找不到传递参数的正确方法。

我的旧 memcpy 代码是

memcpy(&uFeatures.Features[0], &((char*)(m_pData))[iBytePos],iByteCount);
Run Code Online (Sandbox Code Playgroud)

我用 std::copy 尝试了各种方法,但它们都不起作用。

有人可以帮忙吗?

Nee*_*asu 2

从你的语法看来它会是这样的。(假设 Features[0] 是 char*,如果不是,则需要强制转换(检查注释))

std::copy(&uFeatures.Features[0], &uFeatures.Features[0]+iByteCount, &((char*)(m_pData))[iBytePos])
Run Code Online (Sandbox Code Playgroud)

正如我在你的评论中看到的

我想让编译器决定它喜欢什么(memcopy、memmove 或其他任何东西),这就是我想使用 std::copy 的原因

std::copy不会被memcpy编译器翻译。他们是不相关的。复制会做这样的事情

while (first != last) {
    *d_first++ = *first++;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是对你答案的最后一点进行注释。我见过多个编译器(和标准库),其中 `std::copy` 最终被降级为 `memcpy` 或类似的指令,实际上它至少对于 pod 类型来说是完全合法的(根据 as-if 规则)。 (2认同)