考虑以下结构:
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结构的beginnig中.目前很好.但是我似乎找不到任何保证,如果有的话,在x和y或y和z等之间将没有空白或填充.但是我还没有签出C99标准.
问题是,如果端点结构元素之间没有空格,那么该想法将行不通.
问题:
>我是对的,确实不能保证这将在C或C中都有效.
>这实际上可用于任何已知的实现吗?换句话说,您知道在其中不起作用的任何实现吗?
>是否有任何标准(我的意思不是特定于编译器的方式)表达相同的想法?也许C 0x对齐功能可能有所帮助?
顺便说一句,这不是我在生产代码中正在做的事情,不用担心,只是好奇.提前致谢.
解决方法:
>是的
>取决于架构的对齐需求和编译器策略
>否,但是您可以做一个对象包装器(但是最终将以.z()而不是.z结尾)
大多数编译器应支持使用编译指示或属性压缩结构.例如#pragma pack.