直接赋值(即=
)是否与将某些内容强制转换为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;
* 所有类型都可以按位复制。
编辑: 根据答案,memcopy 是否与 '=' 相同
最佳答案
这基本上就是 memcpy
所做的,并且对 POD types 有效(假设 sizeof(Test)
真的是 8)。但是,memcpy
几乎肯定会更快,因为编译器将具有特殊优化的汇编程序例程。
如果您使用非 POD 类型尝试此操作(或 memcpy
),您将调用未定义的行为。所以一般来说,您应该使用 std::copy
或只使用赋值。
您还应该避免在 C++ 中使用 malloc
,因为它不是类型安全的;使用 new
,或 placement new
如果必须的话。
关于c++ - For 循环与赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11228563/