次の構造体を検討してください。
struct Vector4D
{
union
{
double components[4];
struct { double x, y, z, t; } Endpoint;
};
};
WinApi の IPAddress 構造体で似たようなものを見たように思えます。アイデアは、配列コンポーネントをインデックスと名前の両方で使用できるようにすることです。次に例を示します。
Vector4D v;
v.components[2] = 3.0;
ASSERT(v.Endpoint.z == 3.0) //let's ignore precision issues for now
C++ 標準では、POD 構造体の先頭に「空の」スペースがないことが保証されています。つまり、要素 x は Endpoint 構造体の先頭に配置されます。これまでのところ良い。x
しかし、 and y
、またはy
andなどの間に空のスペースやパディングがないという保証はないようですz
。ただし、C99標準はチェックアウトしていません。
問題は、Endpoint 構造要素間に空のスペースがある場合、アイデアが機能しないことです。
質問:
これが C または C++ のいずれかで機能するという保証はないというのは正しいですか。
これは、既知の実装で実際に機能しますか? つまり、これが機能しない実装を知っていますか?
同じ考えを表現するための標準的な(コンパイラ固有ではない)方法はありますか?C++0x のアライメント機能が役立つのではないでしょうか?
ところで、これは私が製品コードで行っていることではありません。心配しないでください。前もって感謝します。