For循环vs赋值运算符

Lau*_*uer 0 c++ bit-manipulation copy

直接赋值( =)与转换内容相同char*,然后使用for循环来逐字节复制它吗?*
我想知道一种方法是否优于另一种方法.

struct A
{
    int a;
    int b;
} Test;

void* Buffer = malloc(1024);


// Casting and byte copying
for (int i=0; i != 8; i++)
{
    ((char*)Buffer)[i] = ((char*)Test)[i];
}

// Assignment
((A*)Buffer)[0] = Test;
Run Code Online (Sandbox Code Playgroud)

*所有类型都是按位可复制的.

编辑:根据答案,memcopy与'='相同

Oli*_*rth 10

这基本上是什么memcpy,并且对POD类型有效(假设sizeof(Test)确实是8).但是,memcpy几乎肯定会更快,因为编译器将具有特殊优化的汇编程序例程.

如果您尝试使用非POD类型(或),您将调用未定义的行为memcpy.所以一般来说,你应该使用std::copy或只使用作业.

您还应该避免malloc使用C++,因为它不是类型安全的; 如果必须,请使用new放置new.