struct Point
{
double X;
double Y;
};
Run Code Online (Sandbox Code Playgroud)
Q1)是以下便携式(编译器/机器)
Point point = { 1.1, 2.2 };
double arr[2] = {};
memcpy(arr, point, sizeof(double)*2);
Run Code Online (Sandbox Code Playgroud)
Q2)结构数组相同
Point *pPoints = new Point[numPoints];
double *pArr = new double[2*numPoints];
memcpy(pArr, pPoints, sizeof(double)*2*numPoints);
Run Code Online (Sandbox Code Playgroud)
在Windows/MSVC上,我期待两者都能成功.
编辑:我不是为每个可能的结构/类别问这些问题; 我要求结构"Point"的这种特殊情况(注意:只有2个pod,没有virtualmember/user构造函数/用户构造函数).这可能是一个C问题,它与编译器的结构对齐和内存布局有关.
到目前为止,我已经知道c/c ++标准没有对Point的布局强制执行任何操作,因此我必须使用静态断言来确保它,对吗?
您的代码假设为sizeof(struct Point) == 2*sizeof(double);.这是一个危险的假设,因为当你编写和测试代码时它会成立,但运气真实,而不是定义.运气有跑出去的习惯:)
最有可能在这种情况下你永远不会有问题(因为定义struct Point不太可能改变,机器对齐问题也不太可能在这种类型的可移植性).话虽如此,基于代码的代码是一种可怕的模式.
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |