考虑以下结构:
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
, or y
andz
等之间。虽然我还没有检查过 C99 标准。
问题是,如果 Endpoint 结构元素之间有一个空白空间,那么这个想法就行不通了。
问题:
我是对的,确实不能保证这将在 C 或 C++ 中工作。
这实际上适用于任何已知的实现吗?换句话说,您是否知道这不起作用的任何实现?
是否有任何标准(我的意思不是特定于编译器)的方式来表达相同的想法?也许 C++0x 对齐功能可能会有所帮助?
顺便说一句,这不是我在生产代码中做的事情,别担心,只是好奇。提前致谢。