c++ - For 循环与赋值运算符

标签 c++ copy bit-manipulation

直接赋值(=)是否与将某些内容强制转换为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/

相关文章:

C# 在 GUI 中复制剪切

javascript - UTF-8 编码算法如何在 8 位 block 上工作(在 JavaScript 中)?

C++模数运算符循环数组

c++ - 如何获取 beast::flat_buffer 中的数据?

c++ decltype如何使用来简化变量定义

docker-compose 主机和容器上的持久数据

c++ - 字符串文字和模板函数的多个版本

javascript - 将 Google 演示文稿复制到文件夹

algorithm - 移除子集的博弈算法 [HW/Study]

c - 在 C 中一次在 char 数组中设置多个值(重新实现 strcpy)