Nomeação de elementos de matriz ou estrutura e matriz em uma união
Considere a seguinte estrutura:
struct Vector4D
{
union
{
double components[4];
struct { double x, y, z, t; } Endpoint;
};
};
Parece-me que tenho visto algo semelhante na estrutura do endereço IP do WinApi. A idéia é me dar a possibilidade de usar os componentes da matriz por índice e por nome, por exemplo:
Vector4D v;
v.components[2] = 3.0;
ASSERT(v.Endpoint.z == 3.0) //let's ignore precision issues for now
No padrão C ++, há uma garantia de que não haverá espaço "vazio" no início de uma estrutura POD, ou seja, o elemento x estará situado no início da estrutura do ponto de extremidade. Bom até agora. Mas eu não acho garantias de que não haverá espaço vazio ou preenchimento, se preferir, entrex
ey
ouy
ez
, etc. Ainda não verifiquei o padrão C9
O problema é que, se houver um espaço vazio entre os elementos de estrutura do Endpoint, a ideia não funcionar
Questões
Estou certo de que realmente não há garantia de que isso funcione em C ou C +
Isso praticamente funcionará em qualquer implementação conhecida? Em outras palavras, você conhece alguma implementação em que isso não funcione?
Existe alguma maneira padrão (quero dizer, não específica do compilador) de expressar a mesma idéia? Talvez os recursos de alinhamento do C ++ 0x possam ajudar?
By the way, isso não é algo que estou fazendo no código de produção, não se preocupe, apenas curioso. Desde já, obrigado