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 では、両方が成功することを期待しています。
編集:すべての可能な構造体/クラスに対してこれらの質問をしているわけではありません。構造体「ポイント」のこの特定のケースを求めています(注意:ポッドは2つだけで、仮想メンバー/ユーザーコンストラクター/ユーザーデストラクターはありません)。これは、コンパイラ間の構造体のアライメントとメモリ レイアウトに関係する C の質問かもしれません。
これまでのところ、c/c++ 標準では Point のレイアウトについて何も強制されていないことがわかったので、静的アサートで自分で確認する必要があります。正しいですか?