gpt4 book ai didi

c++ - memcpy pod 结构数组到数组

转载 作者:太空狗 更新时间:2023-10-29 23:52:06 26 4
gpt4 key购买 nike

struct Point
{
double X;
double Y;
};

Q1) 是以下可移植的(编译器/机器)

Point point = { 1.1, 2.2 };
double arr[2] = {};
memcpy(arr, point, sizeof(double)*2);

Q2) 结构数组相同

Point *pPoints = new Point[numPoints];
double *pArr = new double[2*numPoints];
memcpy(pArr, pPoints, sizeof(double)*2*numPoints);

在 Windows/MSVC 上,我希望两者都能成功。

编辑:我并不是针对每个可能的结构/类都问这些问题;我正在询问结构“Point”的这种特殊情况(注意:只有 2 个 pod,没有虚拟成员/用户构造函数/用户 desctructor)。这也可能是一个 C 问题,它与跨编译器的结构对齐和内存布局有关。

到目前为止,我已经知道 c/c++ 标准没有对 Point 的布局强制执行任何内容,所以我必须自己使用静态断言来确保它,对吗?

最佳答案

您的代码假设 sizeof(struct Point) == 2*sizeof(double);。这是一个危险的假设,因为当您编写和测试代码时它会是真的,但它是幸运的,而不是定义。运气总是会耗尽:)

很可能在这种情况下你永远不会遇到问题(因为 struct Point 的定义不太可能改变,并且机器对齐问题也不太可能出现在这种类型的可移植性中) .话虽这么说,但作为代码的基础是一种可怕的模式。

关于c++ - memcpy pod 结构数组到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com